aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/base/core.c15
-rw-r--r--drivers/base/power/main.c4
2 files changed, 8 insertions, 11 deletions
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 79848e6..adbc017 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -817,17 +817,12 @@ int device_add(struct device *dev)
error = device_add_attrs(dev);
if (error)
goto AttrsError;
- error = dpm_sysfs_add(dev);
- if (error)
- goto PMError;
- error = device_pm_add(dev);
- if (error) {
- dpm_sysfs_remove(dev);
- goto PMError;
- }
error = bus_add_device(dev);
if (error)
goto BusError;
+ error = device_pm_add(dev);
+ if (error)
+ goto PMError;
kobject_uevent(&dev->kobj, KOBJ_ADD);
bus_attach_device(dev);
if (parent)
@@ -847,9 +842,9 @@ int device_add(struct device *dev)
Done:
put_device(dev);
return error;
- BusError:
- device_pm_remove(dev);
PMError:
+ bus_remove_device(dev);
+ BusError:
if (dev->bus)
blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
BUS_NOTIFY_DEL_DEVICE, dev);
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index 0e3991a..93a1469 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -81,7 +81,9 @@ int device_pm_add(struct device *dev)
WARN_ON(true);
error = -EBUSY;
} else {
- list_add_tail(&dev->power.entry, &dpm_active);
+ error = dpm_sysfs_add(dev);
+ if (!error)
+ list_add_tail(&dev->power.entry, &dpm_active);
}
mutex_unlock(&dpm_list_mtx);
return error;