diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2010-12-16 11:11:45 -0500 |
---|---|---|
committer | Rafael J. Wysocki <rjw@sisk.pl> | 2010-12-24 09:02:44 -0500 |
commit | b64959e6158d6dcb640fc22d7f43b94ad1c91135 (patch) | |
tree | 51208ab0468472bd2e8a33ed44a5eaa69d8247ed | |
parent | b8c76f6aed0ab7df73a6410f3f82de2c831bb144 (diff) |
PM: Permit registration of parentless devices during system suspend
The registration of a new parentless device during system suspend
will not lead to any complications affecting the PM core (the device
will be effectively seen after the subsequent resume has completed),
so remove the code used for detection of such events.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
-rw-r--r-- | drivers/base/power/main.c | 25 |
1 files changed, 3 insertions, 22 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index a90480baa850..11fe6ed75278 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c | |||
@@ -49,12 +49,6 @@ LIST_HEAD(dpm_noirq_list); | |||
49 | static DEFINE_MUTEX(dpm_list_mtx); | 49 | static DEFINE_MUTEX(dpm_list_mtx); |
50 | static pm_message_t pm_transition; | 50 | static pm_message_t pm_transition; |
51 | 51 | ||
52 | /* | ||
53 | * Set once the preparation of devices for a PM transition has started, reset | ||
54 | * before starting to resume devices. Protected by dpm_list_mtx. | ||
55 | */ | ||
56 | static bool transition_started; | ||
57 | |||
58 | static int async_error; | 52 | static int async_error; |
59 | 53 | ||
60 | /** | 54 | /** |
@@ -97,19 +91,9 @@ void device_pm_add(struct device *dev) | |||
97 | dev->bus ? dev->bus->name : "No Bus", | 91 | dev->bus ? dev->bus->name : "No Bus", |
98 | kobject_name(&dev->kobj)); | 92 | kobject_name(&dev->kobj)); |
99 | mutex_lock(&dpm_list_mtx); | 93 | mutex_lock(&dpm_list_mtx); |
100 | if (dev->parent) { | 94 | if (dev->parent && dev->parent->power.in_suspend) |
101 | if (dev->parent->power.in_suspend) | 95 | dev_warn(dev, "parent %s should not be sleeping\n", |
102 | dev_warn(dev, "parent %s should not be sleeping\n", | 96 | dev_name(dev->parent)); |
103 | dev_name(dev->parent)); | ||
104 | } else if (transition_started) { | ||
105 | /* | ||
106 | * We refuse to register parentless devices while a PM | ||
107 | * transition is in progress in order to avoid leaving them | ||
108 | * unhandled down the road | ||
109 | */ | ||
110 | dev_WARN(dev, "Parentless device registered during a PM transaction\n"); | ||
111 | } | ||
112 | |||
113 | list_add_tail(&dev->power.entry, &dpm_list); | 97 | list_add_tail(&dev->power.entry, &dpm_list); |
114 | mutex_unlock(&dpm_list_mtx); | 98 | mutex_unlock(&dpm_list_mtx); |
115 | } | 99 | } |
@@ -482,7 +466,6 @@ void dpm_resume_noirq(pm_message_t state) | |||
482 | ktime_t starttime = ktime_get(); | 466 | ktime_t starttime = ktime_get(); |
483 | 467 | ||
484 | mutex_lock(&dpm_list_mtx); | 468 | mutex_lock(&dpm_list_mtx); |
485 | transition_started = false; | ||
486 | while (!list_empty(&dpm_noirq_list)) { | 469 | while (!list_empty(&dpm_noirq_list)) { |
487 | struct device *dev = to_device(dpm_noirq_list.next); | 470 | struct device *dev = to_device(dpm_noirq_list.next); |
488 | int error; | 471 | int error; |
@@ -684,7 +667,6 @@ static void dpm_complete(pm_message_t state) | |||
684 | 667 | ||
685 | INIT_LIST_HEAD(&list); | 668 | INIT_LIST_HEAD(&list); |
686 | mutex_lock(&dpm_list_mtx); | 669 | mutex_lock(&dpm_list_mtx); |
687 | transition_started = false; | ||
688 | while (!list_empty(&dpm_prepared_list)) { | 670 | while (!list_empty(&dpm_prepared_list)) { |
689 | struct device *dev = to_device(dpm_prepared_list.prev); | 671 | struct device *dev = to_device(dpm_prepared_list.prev); |
690 | 672 | ||
@@ -1020,7 +1002,6 @@ static int dpm_prepare(pm_message_t state) | |||
1020 | int error = 0; | 1002 | int error = 0; |
1021 | 1003 | ||
1022 | mutex_lock(&dpm_list_mtx); | 1004 | mutex_lock(&dpm_list_mtx); |
1023 | transition_started = true; | ||
1024 | while (!list_empty(&dpm_list)) { | 1005 | while (!list_empty(&dpm_list)) { |
1025 | struct device *dev = to_device(dpm_list.next); | 1006 | struct device *dev = to_device(dpm_list.next); |
1026 | 1007 | ||