Merge tag 'csky-for-linus-5.4-rc1' of git://github.com/c-sky/csky-linux
[linux-2.6-microblaze.git] / drivers / base / dd.c
index 994a907..d811e60 100644 (file)
@@ -554,9 +554,16 @@ re_probe:
                        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 @@ re_probe:
                 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)