While debugging another problem with a PCI driver, I noticed that if device probe routine returns an error, the kernel will crash when module is unloaded. It looks like pci_register_driver() sets drv->bus to be PCI then in the module unload. module_unload my_device_exit_module pci_unregister_driver bus_remove_driver OOPS One way to fix this would be to have pci_register_driver clear the bus flag (it has no reference) if an error was detected. --- a/drivers/pci/pci-driver.c 2013-07-08 10:54:52.968241742 -0700 +++ b/drivers/pci/pci-driver.c 2013-09-03 15:34:10.112477893 -0700 @@ -1120,6 +1120,8 @@ const struct dev_pm_ops pci_dev_pm_ops = int __pci_register_driver(struct pci_driver *drv, struct module *owner, const char *mod_name) { + int err; + /* initialize common driver fields */ drv->driver.name = drv->name; drv->driver.bus = &pci_bus_type; @@ -1130,7 +1132,11 @@ int __pci_register_driver(struct pci_dri INIT_LIST_HEAD(&drv->dynids.list); /* register with core */ - return driver_register(&drv->driver); + err = driver_register(&drv->driver); + if (err) + drv->driver.bus = NULL; + + return err; } /** -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html