cxl/core: Emit modalias for CXL devices

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>
This commit is contained in:
Dan Williams
2022-01-23 16:30:41 -08:00
parent d17d0540a0
commit 83fbdbe4c1
2 changed files with 26 additions and 9 deletions

View File

@@ -34,6 +34,15 @@ Description:
the same value communicated in the DEVTYPE environment variable the same value communicated in the DEVTYPE environment variable
for uevents for devices on the "cxl" bus. 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 What: /sys/bus/cxl/devices/portX/uport
Date: June, 2021 Date: June, 2021
KernelVersion: v5.14 KernelVersion: v5.14

View File

@@ -34,8 +34,25 @@ static ssize_t devtype_show(struct device *dev, struct device_attribute *attr,
} }
static DEVICE_ATTR_RO(devtype); 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[] = { static struct attribute *cxl_base_attributes[] = {
&dev_attr_devtype.attr, &dev_attr_devtype.attr,
&dev_attr_modalias.attr,
NULL, NULL,
}; };
@@ -855,15 +872,6 @@ void cxl_driver_unregister(struct cxl_driver *cxl_drv)
} }
EXPORT_SYMBOL_NS_GPL(cxl_driver_unregister, CXL); 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) static int cxl_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
{ {
return add_uevent_var(env, "MODALIAS=" CXL_MODALIAS_FMT, return add_uevent_var(env, "MODALIAS=" CXL_MODALIAS_FMT,