devres: device resource management
[powerpc.git] / drivers / base / dd.c
index b5bf243..6a48824 100644 (file)
@@ -112,6 +112,7 @@ static int really_probe(void *void_data)
        atomic_inc(&probe_count);
        pr_debug("%s: Probing driver %s with device %s\n",
                 drv->bus->name, drv->name, dev->bus_id);
+       WARN_ON(!list_empty(&dev->devres_head));
 
        dev->driver = drv;
        if (driver_sysfs_add(dev)) {
@@ -137,6 +138,7 @@ static int really_probe(void *void_data)
        goto done;
 
 probe_failed:
+       devres_release_all(dev);
        driver_sysfs_remove(dev);
        dev->driver = NULL;
 
@@ -327,6 +329,7 @@ static void __device_release_driver(struct device * dev)
                        dev->bus->remove(dev);
                else if (drv->remove)
                        drv->remove(dev);
+               devres_release_all(dev);
                dev->driver = NULL;
                put_driver(drv);
        }