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:
@@ -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,
|
|||||||
}
|
}
|
||||||
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,
|
||||||
|
Reference in New Issue
Block a user