OSDN Git Service

cxl/core: Emit modalias for CXL devices
authorDan Williams <dan.j.williams@intel.com>
Mon, 24 Jan 2022 00:30:41 +0000 (16:30 -0800)
committerDan Williams <dan.j.williams@intel.com>
Wed, 9 Feb 2022 06:57:30 +0000 (22:57 -0800)
In order to enable libkmod lookups for CXL device objects to their
corresponding module, add 'modalias' to the base attribute of CXL
devices.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Ben Widawsky <ben.widawsky@intel.com>
Link: https://lore.kernel.org/r/164298424120.3018233.15611905873808708542.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Documentation/ABI/testing/sysfs-bus-cxl
drivers/cxl/core/port.c

index 0b6a2e6..6d8cbf3 100644 (file)
@@ -34,6 +34,15 @@ Description:
                the same value communicated in the DEVTYPE environment variable
                for uevents for devices on the "cxl" bus.
 
+What:          /sys/bus/cxl/devices/*/modalias
+Date:          December, 2021
+KernelVersion: v5.18
+Contact:       linux-cxl@vger.kernel.org
+Description:
+               CXL device objects export the modalias attribute which mirrors
+               the same value communicated in the MODALIAS environment variable
+               for uevents for devices on the "cxl" bus.
+
 What:          /sys/bus/cxl/devices/portX/uport
 Date:          June, 2021
 KernelVersion: v5.14
index 4dfb9df..0bbd8fb 100644 (file)
@@ -34,8 +34,25 @@ static ssize_t devtype_show(struct device *dev, struct device_attribute *attr,
 }
 static DEVICE_ATTR_RO(devtype);
 
+static int cxl_device_id(struct device *dev)
+{
+       if (dev->type == &cxl_nvdimm_bridge_type)
+               return CXL_DEVICE_NVDIMM_BRIDGE;
+       if (dev->type == &cxl_nvdimm_type)
+               return CXL_DEVICE_NVDIMM;
+       return 0;
+}
+
+static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
+                            char *buf)
+{
+       return sysfs_emit(buf, CXL_MODALIAS_FMT "\n", cxl_device_id(dev));
+}
+static DEVICE_ATTR_RO(modalias);
+
 static struct attribute *cxl_base_attributes[] = {
        &dev_attr_devtype.attr,
+       &dev_attr_modalias.attr,
        NULL,
 };
 
@@ -855,15 +872,6 @@ void cxl_driver_unregister(struct cxl_driver *cxl_drv)
 }
 EXPORT_SYMBOL_NS_GPL(cxl_driver_unregister, CXL);
 
-static int cxl_device_id(struct device *dev)
-{
-       if (dev->type == &cxl_nvdimm_bridge_type)
-               return CXL_DEVICE_NVDIMM_BRIDGE;
-       if (dev->type == &cxl_nvdimm_type)
-               return CXL_DEVICE_NVDIMM;
-       return 0;
-}
-
 static int cxl_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
 {
        return add_uevent_var(env, "MODALIAS=" CXL_MODALIAS_FMT,