]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/base/dd.c
Merge tag 'mmc-v5.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc
[linux.git] / drivers / base / dd.c
index 994a9074742046edfed5afefe62011450e20669c..d811e60610d33ae952efacc2db3ce9fb47349a5e 100644 (file)
@@ -554,9 +554,16 @@ static int really_probe(struct device *dev, struct device_driver *drv)
                        goto probe_failed;
        }
 
+       if (device_add_groups(dev, drv->dev_groups)) {
+               dev_err(dev, "device_add_groups() failed\n");
+               goto dev_groups_failed;
+       }
+
        if (test_remove) {
                test_remove = false;
 
+               device_remove_groups(dev, drv->dev_groups);
+
                if (dev->bus->remove)
                        dev->bus->remove(dev);
                else if (drv->remove)
@@ -584,6 +591,11 @@ static int really_probe(struct device *dev, struct device_driver *drv)
                 drv->bus->name, __func__, dev_name(dev), drv->name);
        goto done;
 
+dev_groups_failed:
+       if (dev->bus->remove)
+               dev->bus->remove(dev);
+       else if (drv->remove)
+               drv->remove(dev);
 probe_failed:
        if (dev->bus)
                blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
@@ -1114,6 +1126,8 @@ static void __device_release_driver(struct device *dev, struct device *parent)
 
                pm_runtime_put_sync(dev);
 
+               device_remove_groups(dev, drv->dev_groups);
+
                if (dev->bus && dev->bus->remove)
                        dev->bus->remove(dev);
                else if (drv->remove)