|
@@ -49,12 +49,6 @@ LIST_HEAD(dpm_noirq_list);
|
|
static DEFINE_MUTEX(dpm_list_mtx);
|
|
static DEFINE_MUTEX(dpm_list_mtx);
|
|
static pm_message_t pm_transition;
|
|
static pm_message_t pm_transition;
|
|
|
|
|
|
-/*
|
|
|
|
- * Set once the preparation of devices for a PM transition has started, reset
|
|
|
|
- * before starting to resume devices. Protected by dpm_list_mtx.
|
|
|
|
- */
|
|
|
|
-static bool transition_started;
|
|
|
|
-
|
|
|
|
static int async_error;
|
|
static int async_error;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -97,19 +91,9 @@ void device_pm_add(struct device *dev)
|
|
dev->bus ? dev->bus->name : "No Bus",
|
|
dev->bus ? dev->bus->name : "No Bus",
|
|
kobject_name(&dev->kobj));
|
|
kobject_name(&dev->kobj));
|
|
mutex_lock(&dpm_list_mtx);
|
|
mutex_lock(&dpm_list_mtx);
|
|
- if (dev->parent) {
|
|
|
|
- if (dev->parent->power.in_suspend)
|
|
|
|
- dev_warn(dev, "parent %s should not be sleeping\n",
|
|
|
|
- dev_name(dev->parent));
|
|
|
|
- } else if (transition_started) {
|
|
|
|
- /*
|
|
|
|
- * We refuse to register parentless devices while a PM
|
|
|
|
- * transition is in progress in order to avoid leaving them
|
|
|
|
- * unhandled down the road
|
|
|
|
- */
|
|
|
|
- dev_WARN(dev, "Parentless device registered during a PM transaction\n");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ if (dev->parent && dev->parent->power.in_suspend)
|
|
|
|
+ dev_warn(dev, "parent %s should not be sleeping\n",
|
|
|
|
+ dev_name(dev->parent));
|
|
list_add_tail(&dev->power.entry, &dpm_list);
|
|
list_add_tail(&dev->power.entry, &dpm_list);
|
|
mutex_unlock(&dpm_list_mtx);
|
|
mutex_unlock(&dpm_list_mtx);
|
|
}
|
|
}
|
|
@@ -482,7 +466,6 @@ void dpm_resume_noirq(pm_message_t state)
|
|
ktime_t starttime = ktime_get();
|
|
ktime_t starttime = ktime_get();
|
|
|
|
|
|
mutex_lock(&dpm_list_mtx);
|
|
mutex_lock(&dpm_list_mtx);
|
|
- transition_started = false;
|
|
|
|
while (!list_empty(&dpm_noirq_list)) {
|
|
while (!list_empty(&dpm_noirq_list)) {
|
|
struct device *dev = to_device(dpm_noirq_list.next);
|
|
struct device *dev = to_device(dpm_noirq_list.next);
|
|
int error;
|
|
int error;
|
|
@@ -684,7 +667,6 @@ static void dpm_complete(pm_message_t state)
|
|
|
|
|
|
INIT_LIST_HEAD(&list);
|
|
INIT_LIST_HEAD(&list);
|
|
mutex_lock(&dpm_list_mtx);
|
|
mutex_lock(&dpm_list_mtx);
|
|
- transition_started = false;
|
|
|
|
while (!list_empty(&dpm_prepared_list)) {
|
|
while (!list_empty(&dpm_prepared_list)) {
|
|
struct device *dev = to_device(dpm_prepared_list.prev);
|
|
struct device *dev = to_device(dpm_prepared_list.prev);
|
|
|
|
|
|
@@ -1020,7 +1002,6 @@ static int dpm_prepare(pm_message_t state)
|
|
int error = 0;
|
|
int error = 0;
|
|
|
|
|
|
mutex_lock(&dpm_list_mtx);
|
|
mutex_lock(&dpm_list_mtx);
|
|
- transition_started = true;
|
|
|
|
while (!list_empty(&dpm_list)) {
|
|
while (!list_empty(&dpm_list)) {
|
|
struct device *dev = to_device(dpm_list.next);
|
|
struct device *dev = to_device(dpm_list.next);
|
|
|
|
|