@@ -483,11 +483,17 @@ static inline int idxd_wq_refcount(struct idxd_wq *wq)
return wq->client_count;
};
+#define MODULE_ALIAS_IDXD_DEVICE(type) MODULE_ALIAS("idxd:t" __stringify(type) "*")
+#define IDXD_DEVICES_MODALIAS_FMT "idxd:t%d"
+
int __must_check __idxd_driver_register(struct idxd_device_driver *idxd_drv,
struct module *module, const char *mod_name);
#define idxd_driver_register(driver) \
__idxd_driver_register(driver, THIS_MODULE, KBUILD_MODNAME)
+#define module_idxd_driver(driver) \
+ module_driver(driver, idxd_driver_register, idxd_driver_unregister)
+
void idxd_driver_unregister(struct idxd_device_driver *idxd_drv);
int idxd_register_bus_type(void);
@@ -843,8 +843,10 @@ int __idxd_driver_register(struct idxd_device_driver *idxd_drv, struct module *o
return driver_register(drv);
}
+EXPORT_SYMBOL_GPL(__idxd_driver_register);
void idxd_driver_unregister(struct idxd_device_driver *idxd_drv)
{
driver_unregister(&idxd_drv->drv);
}
+EXPORT_SYMBOL_GPL(idxd_driver_unregister);
@@ -53,11 +53,17 @@ static int idxd_config_bus_remove(struct device *dev)
return 0;
}
+static int idxd_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
+{
+ return add_uevent_var(env, "MODALIAS=" IDXD_DEVICES_MODALIAS_FMT, 0);
+}
+
struct bus_type dsa_bus_type = {
.name = "dsa",
.match = idxd_config_bus_match,
.probe = idxd_config_bus_probe,
.remove = idxd_config_bus_remove,
+ .uevent = idxd_bus_uevent,
};
#define DRIVER_ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) \
Add support to allow an external driver to be registered to the dsa_bus_type and also auto-loaded. Signed-off-by: Dave Jiang <dave.jiang@intel.com> --- drivers/dma/idxd/idxd.h | 6 ++++++ drivers/dma/idxd/init.c | 2 ++ drivers/dma/idxd/sysfs.c | 6 ++++++ 3 files changed, 14 insertions(+)