With bus_prefix, retrieve the unique_id of CXL mem device. This will
allow selecting a specific CXL mem device for the security test code.

Signed-off-by: Dave Jiang <dave.ji...@intel.com>


---
v2:
- Fix commit subject. (Vishal)
---
 ndctl/lib/libndctl.c |   28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/ndctl/lib/libndctl.c b/ndctl/lib/libndctl.c
index d2e800bc840a..c569178b9a3a 100644
--- a/ndctl/lib/libndctl.c
+++ b/ndctl/lib/libndctl.c
@@ -1749,6 +1749,33 @@ NDCTL_EXPORT void ndctl_dimm_refresh_flags(struct 
ndctl_dimm *dimm)
                parse_papr_flags(dimm, buf);
 }
 
+static int populate_cxl_dimm_attributes(struct ndctl_dimm *dimm,
+                                       const char *dimm_base)
+{
+       int rc = 0;
+       char buf[SYSFS_ATTR_SIZE];
+       struct ndctl_ctx *ctx = dimm->bus->ctx;
+       char *path = calloc(1, strlen(dimm_base) + 100);
+       const char *bus_prefix = dimm->bus_prefix;
+
+       if (!path)
+               return -ENOMEM;
+
+       sprintf(path, "%s/%s/id", dimm_base, bus_prefix);
+       if (sysfs_read_attr(ctx, path, buf) == 0) {
+               dimm->unique_id = strdup(buf);
+               if (!dimm->unique_id) {
+                       rc = -ENOMEM;
+                       goto err_read;
+               }
+       }
+
+ err_read:
+
+       free(path);
+       return rc;
+}
+
 static int populate_dimm_attributes(struct ndctl_dimm *dimm,
                                    const char *dimm_base)
 {
@@ -2018,6 +2045,7 @@ static void *add_dimm(void *parent, int id, const char 
*dimm_base)
                        rc = -ENOMEM;
                        goto out;
                }
+               rc = populate_cxl_dimm_attributes(dimm, dimm_base);
        }
 
        if (rc == -ENODEV) {



Reply via email to