On Tue, Mar 23, 2021 at 08:14:15PM +0100, Christoph Hellwig wrote: > > static struct mdev_driver vfio_mdev_driver = { > > + .driver = { > > + .name = "vfio_mdev", > > + .owner = THIS_MODULE, > > + .mod_name = KBUILD_MODNAME, > > + }, > > What is the mod_name initialization for? It is usually hidden and works like this: /* pci_register_driver() must be a macro so KBUILD_MODNAME can be expanded */ #define pci_register_driver(driver) \ __pci_register_driver(driver, THIS_MODULE, KBUILD_MODNAME) int __pci_register_driver(struct pci_driver *drv, struct module *owner, const char *mod_name) { drv->driver.owner = owner; drv->driver.mod_name = mod_name; > I've not really seen that in anywere else, and the only user seems > to be module_add_driver for a rather odd case we shouldn't hit here. vfio_mdev could be compiled built in? AFAICT it handles the case where THIS_MODULE==NULL so we still need to create sysfs links to the built in module. If it is left NULL then a few sysfs files go missing for the built in mode but no harm done? I think it is correct to have it Thanks, Jason