Message ID | 166792840255.3767969.7931186352678182941.stgit@djiang5-desk3.ch.intel.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Introduce security commands for CXL pmem device | expand |
On Tue, 08 Nov 2022 10:26:42 -0700 Dave Jiang <dave.jiang@intel.com> wrote: > Add an id group attribute for CXL based nvdimm object. The addition allows > ndctl to display the "unique id" for the nvdimm. The serial number for the > CXL memory device will be used for this id. > > [ > { > "dev":"nmem10", > "id":"0x4", > "security":"disabled" > }, > ] > > The id attribute is needed by the ndctl security key management to setup a > keyblob with a unique file name tied to the mem device. > > Signed-off-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > Documentation/ABI/testing/sysfs-bus-nvdimm | 6 ++++++ > drivers/cxl/pmem.c | 28 +++++++++++++++++++++++++++- > 2 files changed, 33 insertions(+), 1 deletion(-) > > diff --git a/Documentation/ABI/testing/sysfs-bus-nvdimm b/Documentation/ABI/testing/sysfs-bus-nvdimm > index 1c1f5acbf53d..91945211e53b 100644 > --- a/Documentation/ABI/testing/sysfs-bus-nvdimm > +++ b/Documentation/ABI/testing/sysfs-bus-nvdimm > @@ -41,3 +41,9 @@ KernelVersion: 5.18 > Contact: Kajol Jain <kjain@linux.ibm.com> > Description: (RO) This sysfs file exposes the cpumask which is designated to > to retrieve nvdimm pmu event counter data. > + > +What: /sys/bus/nd/devices/nmemX/id > +Date: November 2022 > +KernelVersion: 6.2 > +Contact: Dave Jiang <dave.jiang@intel.com> > +Description: (RO) Show the id (serial) of the device. > diff --git a/drivers/cxl/pmem.c b/drivers/cxl/pmem.c > index 24bec4ca3866..9209c7dd72d0 100644 > --- a/drivers/cxl/pmem.c > +++ b/drivers/cxl/pmem.c > @@ -48,6 +48,31 @@ static void unregister_nvdimm(void *nvdimm) > cxl_nvd->bridge = NULL; > } > > +static ssize_t id_show(struct device *dev, struct device_attribute *attr, char *buf) > +{ > + struct nvdimm *nvdimm = to_nvdimm(dev); > + struct cxl_nvdimm *cxl_nvd = nvdimm_provider_data(nvdimm); > + struct cxl_dev_state *cxlds = cxl_nvd->cxlmd->cxlds; > + > + return sysfs_emit(buf, "%lld\n", cxlds->serial); > +} > +static DEVICE_ATTR_RO(id); > + > +static struct attribute *cxl_dimm_attributes[] = { > + &dev_attr_id.attr, > + NULL > +}; > + > +static const struct attribute_group cxl_dimm_attribute_group = { > + .name = "cxl", > + .attrs = cxl_dimm_attributes, > +}; > + > +static const struct attribute_group *cxl_dimm_attribute_groups[] = { > + &cxl_dimm_attribute_group, > + NULL > +}; > + > static int cxl_nvdimm_probe(struct device *dev) > { > struct cxl_nvdimm *cxl_nvd = to_cxl_nvdimm(dev); > @@ -77,7 +102,8 @@ static int cxl_nvdimm_probe(struct device *dev) > set_bit(ND_CMD_GET_CONFIG_SIZE, &cmd_mask); > set_bit(ND_CMD_GET_CONFIG_DATA, &cmd_mask); > set_bit(ND_CMD_SET_CONFIG_DATA, &cmd_mask); > - nvdimm = __nvdimm_create(cxl_nvb->nvdimm_bus, cxl_nvd, NULL, flags, > + nvdimm = __nvdimm_create(cxl_nvb->nvdimm_bus, cxl_nvd, > + cxl_dimm_attribute_groups, flags, > cmd_mask, 0, NULL, NULL, cxl_security_ops, NULL); > if (!nvdimm) { > rc = -ENOMEM; > >
diff --git a/Documentation/ABI/testing/sysfs-bus-nvdimm b/Documentation/ABI/testing/sysfs-bus-nvdimm index 1c1f5acbf53d..91945211e53b 100644 --- a/Documentation/ABI/testing/sysfs-bus-nvdimm +++ b/Documentation/ABI/testing/sysfs-bus-nvdimm @@ -41,3 +41,9 @@ KernelVersion: 5.18 Contact: Kajol Jain <kjain@linux.ibm.com> Description: (RO) This sysfs file exposes the cpumask which is designated to to retrieve nvdimm pmu event counter data. + +What: /sys/bus/nd/devices/nmemX/id +Date: November 2022 +KernelVersion: 6.2 +Contact: Dave Jiang <dave.jiang@intel.com> +Description: (RO) Show the id (serial) of the device. diff --git a/drivers/cxl/pmem.c b/drivers/cxl/pmem.c index 24bec4ca3866..9209c7dd72d0 100644 --- a/drivers/cxl/pmem.c +++ b/drivers/cxl/pmem.c @@ -48,6 +48,31 @@ static void unregister_nvdimm(void *nvdimm) cxl_nvd->bridge = NULL; } +static ssize_t id_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct nvdimm *nvdimm = to_nvdimm(dev); + struct cxl_nvdimm *cxl_nvd = nvdimm_provider_data(nvdimm); + struct cxl_dev_state *cxlds = cxl_nvd->cxlmd->cxlds; + + return sysfs_emit(buf, "%lld\n", cxlds->serial); +} +static DEVICE_ATTR_RO(id); + +static struct attribute *cxl_dimm_attributes[] = { + &dev_attr_id.attr, + NULL +}; + +static const struct attribute_group cxl_dimm_attribute_group = { + .name = "cxl", + .attrs = cxl_dimm_attributes, +}; + +static const struct attribute_group *cxl_dimm_attribute_groups[] = { + &cxl_dimm_attribute_group, + NULL +}; + static int cxl_nvdimm_probe(struct device *dev) { struct cxl_nvdimm *cxl_nvd = to_cxl_nvdimm(dev); @@ -77,7 +102,8 @@ static int cxl_nvdimm_probe(struct device *dev) set_bit(ND_CMD_GET_CONFIG_SIZE, &cmd_mask); set_bit(ND_CMD_GET_CONFIG_DATA, &cmd_mask); set_bit(ND_CMD_SET_CONFIG_DATA, &cmd_mask); - nvdimm = __nvdimm_create(cxl_nvb->nvdimm_bus, cxl_nvd, NULL, flags, + nvdimm = __nvdimm_create(cxl_nvb->nvdimm_bus, cxl_nvd, + cxl_dimm_attribute_groups, flags, cmd_mask, 0, NULL, NULL, cxl_security_ops, NULL); if (!nvdimm) { rc = -ENOMEM;
Add an id group attribute for CXL based nvdimm object. The addition allows ndctl to display the "unique id" for the nvdimm. The serial number for the CXL memory device will be used for this id. [ { "dev":"nmem10", "id":"0x4", "security":"disabled" }, ] The id attribute is needed by the ndctl security key management to setup a keyblob with a unique file name tied to the mem device. Signed-off-by: Dave Jiang <dave.jiang@intel.com> --- Documentation/ABI/testing/sysfs-bus-nvdimm | 6 ++++++ drivers/cxl/pmem.c | 28 +++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-)