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.

Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6:
[PATCH] Driver core: Fix prefix driver links in /sys/module by bus-name

+33 -5
+33 -5
kernel/module.c
··· 1148 1148 kobject_uevent(&mod->mkobj.kobj, KOBJ_ADD); 1149 1149 return 0; 1150 1150 1151 - out_unreg_drivers: 1152 - kobject_unregister(mod->drivers_dir); 1153 1151 out_unreg_param: 1154 1152 module_param_sysfs_remove(mod); 1153 + out_unreg_drivers: 1154 + kobject_unregister(mod->drivers_dir); 1155 1155 out_unreg: 1156 1156 kobject_del(&mod->mkobj.kobj); 1157 1157 kobject_put(&mod->mkobj.kobj); ··· 2327 2327 printk("\n"); 2328 2328 } 2329 2329 2330 + static char *make_driver_name(struct device_driver *drv) 2331 + { 2332 + char *driver_name; 2333 + 2334 + driver_name = kmalloc(strlen(drv->name) + strlen(drv->bus->name) + 2, 2335 + GFP_KERNEL); 2336 + if (!driver_name) 2337 + return NULL; 2338 + 2339 + sprintf(driver_name, "%s:%s", drv->bus->name, drv->name); 2340 + return driver_name; 2341 + } 2342 + 2330 2343 void module_add_driver(struct module *mod, struct device_driver *drv) 2331 2344 { 2345 + char *driver_name; 2332 2346 int no_warn; 2333 2347 2334 2348 if (!mod || !drv) ··· 2350 2336 2351 2337 /* Don't check return codes; these calls are idempotent */ 2352 2338 no_warn = sysfs_create_link(&drv->kobj, &mod->mkobj.kobj, "module"); 2353 - no_warn = sysfs_create_link(mod->drivers_dir, &drv->kobj, drv->name); 2339 + driver_name = make_driver_name(drv); 2340 + if (driver_name) { 2341 + no_warn = sysfs_create_link(mod->drivers_dir, &drv->kobj, 2342 + driver_name); 2343 + kfree(driver_name); 2344 + } 2354 2345 } 2355 2346 EXPORT_SYMBOL(module_add_driver); 2356 2347 2357 2348 void module_remove_driver(struct device_driver *drv) 2358 2349 { 2350 + char *driver_name; 2351 + 2359 2352 if (!drv) 2360 2353 return; 2354 + 2361 2355 sysfs_remove_link(&drv->kobj, "module"); 2362 - if (drv->owner && drv->owner->drivers_dir) 2363 - sysfs_remove_link(drv->owner->drivers_dir, drv->name); 2356 + if (drv->owner && drv->owner->drivers_dir) { 2357 + driver_name = make_driver_name(drv); 2358 + if (driver_name) { 2359 + sysfs_remove_link(drv->owner->drivers_dir, 2360 + driver_name); 2361 + kfree(driver_name); 2362 + } 2363 + } 2364 2364 } 2365 2365 EXPORT_SYMBOL(module_remove_driver); 2366 2366