Commit 83fbdbe4 authored by Dan Williams's avatar Dan Williams

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: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: default avatarBen Widawsky <ben.widawsky@intel.com>
Link: https://lore.kernel.org/r/164298424120.3018233.15611905873808708542.stgit@dwillia2-desk3.amr.corp.intel.comSigned-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent d17d0540
...@@ -34,6 +34,15 @@ Description: ...@@ -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
......
...@@ -34,8 +34,25 @@ static ssize_t devtype_show(struct device *dev, struct device_attribute *attr, ...@@ -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) ...@@ -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,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment