Driver Core: do not oops when driver_unregister() is called for unregistered drivers
[sfrench/cifs-2.6.git] / drivers / base / driver.c
index b76cc69f11067801e85f830573d098561eb97727..8ae0f63602e0730a71647cb571cbf933d76ceec8 100644 (file)
@@ -223,6 +223,8 @@ int driver_register(struct device_driver *drv)
        int ret;
        struct device_driver *other;
 
+       BUG_ON(!drv->bus->p);
+
        if ((drv->bus->probe && drv->probe) ||
            (drv->bus->remove && drv->remove) ||
            (drv->bus->shutdown && drv->shutdown))
@@ -255,6 +257,10 @@ EXPORT_SYMBOL_GPL(driver_register);
  */
 void driver_unregister(struct device_driver *drv)
 {
+       if (!drv || !drv->p) {
+               WARN(1, "Unexpected driver unregister!\n");
+               return;
+       }
        driver_remove_groups(drv, drv->groups);
        bus_remove_driver(drv);
 }