Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drivers: base: handle module_kobject creation

module_add_driver() relies on module_kset list for
/sys/module/<built-in-module>/drivers directory creation.

Since,
commit 96a1a2412acba ("kernel/params.c: defer most of param_sysfs_init() to late_initcall time")
drivers which are initialized from subsys_initcall() or any other
higher precedence initcall couldn't find the related kobject entry
in the module_kset list because module_kset is not fully populated
by the time module_add_driver() refers it. As a consequence,
module_add_driver() returns early without calling make_driver_name().
Therefore, /sys/module/<built-in-module>/drivers is never created.

Fix this issue by letting module_add_driver() handle module_kobject
creation itself.

Fixes: 96a1a2412acb ("kernel/params.c: defer most of param_sysfs_init() to late_initcall time")
Cc: stable@vger.kernel.org # requires all other patches from the series
Suggested-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Signed-off-by: Shyam Saini <shyamsaini@linux.microsoft.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://lore.kernel.org/r/20250227184930.34163-5-shyamsaini@linux.microsoft.com
Signed-off-by: Petr Pavlu <petr.pavlu@suse.com>

authored by

Shyam Saini and committed by
Petr Pavlu
f95bbfe1 7c76c813

+5 -8
+5 -8
drivers/base/module.c
··· 42 42 if (mod) 43 43 mk = &mod->mkobj; 44 44 else if (drv->mod_name) { 45 - struct kobject *mkobj; 46 - 47 - /* Lookup built-in module entry in /sys/modules */ 48 - mkobj = kset_find_obj(module_kset, drv->mod_name); 49 - if (mkobj) { 50 - mk = container_of(mkobj, struct module_kobject, kobj); 45 + /* Lookup or create built-in module entry in /sys/modules */ 46 + mk = lookup_or_create_module_kobject(drv->mod_name); 47 + if (mk) { 51 48 /* remember our module structure */ 52 49 drv->p->mkobj = mk; 53 - /* kset_find_obj took a reference */ 54 - kobject_put(mkobj); 50 + /* lookup_or_create_module_kobject took a reference */ 51 + kobject_put(&mk->kobj); 55 52 } 56 53 } 57 54