diff options
| author | Pavel Machek <pavel@ucw.cz> | 2005-09-03 18:56:57 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@evo.osdl.org> | 2005-09-05 03:06:16 -0400 |
| commit | ca078bae813dd46c0f9b102fdfb4a3384641ff48 (patch) | |
| tree | e3348f5dcb24159a522941aa2e3ee40bc9e0589b /drivers/base | |
| parent | 829ca9a30a2ddb727981d80fabdbff2ea86bc9ea (diff) | |
[PATCH] swsusp: switch pm_message_t to struct
This adds type-checking to pm_message_t, so that people can't confuse it
with int or u32. It also allows us to fix "disk yoyo" during suspend (disk
spinning down/up/down).
[We've tried that before; since that cpufreq problems were fixed and I've
tried make allyes config and fixed resulting damage.]
Signed-off-by: Pavel Machek <pavel@suse.cz>
Signed-off-by: Alexander Nyberg <alexn@telia.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/base')
| -rw-r--r-- | drivers/base/power/resume.c | 8 | ||||
| -rw-r--r-- | drivers/base/power/runtime.c | 8 | ||||
| -rw-r--r-- | drivers/base/power/suspend.c | 12 | ||||
| -rw-r--r-- | drivers/base/power/sysfs.c | 8 |
4 files changed, 18 insertions, 18 deletions
diff --git a/drivers/base/power/resume.c b/drivers/base/power/resume.c index bdd96b03b885..0a7aa07b9a2a 100644 --- a/drivers/base/power/resume.c +++ b/drivers/base/power/resume.c | |||
| @@ -26,11 +26,11 @@ int resume_device(struct device * dev) | |||
| 26 | 26 | ||
| 27 | down(&dev->sem); | 27 | down(&dev->sem); |
| 28 | if (dev->power.pm_parent | 28 | if (dev->power.pm_parent |
| 29 | && dev->power.pm_parent->power.power_state) { | 29 | && dev->power.pm_parent->power.power_state.event) { |
| 30 | dev_err(dev, "PM: resume from %d, parent %s still %d\n", | 30 | dev_err(dev, "PM: resume from %d, parent %s still %d\n", |
| 31 | dev->power.power_state, | 31 | dev->power.power_state.event, |
| 32 | dev->power.pm_parent->bus_id, | 32 | dev->power.pm_parent->bus_id, |
| 33 | dev->power.pm_parent->power.power_state); | 33 | dev->power.pm_parent->power.power_state.event); |
| 34 | } | 34 | } |
| 35 | if (dev->bus && dev->bus->resume) { | 35 | if (dev->bus && dev->bus->resume) { |
| 36 | dev_dbg(dev,"resuming\n"); | 36 | dev_dbg(dev,"resuming\n"); |
| @@ -54,7 +54,7 @@ void dpm_resume(void) | |||
| 54 | list_add_tail(entry, &dpm_active); | 54 | list_add_tail(entry, &dpm_active); |
| 55 | 55 | ||
| 56 | up(&dpm_list_sem); | 56 | up(&dpm_list_sem); |
| 57 | if (!dev->power.prev_state) | 57 | if (!dev->power.prev_state.event) |
| 58 | resume_device(dev); | 58 | resume_device(dev); |
| 59 | down(&dpm_list_sem); | 59 | down(&dpm_list_sem); |
| 60 | put_device(dev); | 60 | put_device(dev); |
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index 325962d80191..e8f0519f5dfa 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c | |||
| @@ -13,10 +13,10 @@ | |||
| 13 | static void runtime_resume(struct device * dev) | 13 | static void runtime_resume(struct device * dev) |
| 14 | { | 14 | { |
| 15 | dev_dbg(dev, "resuming\n"); | 15 | dev_dbg(dev, "resuming\n"); |
| 16 | if (!dev->power.power_state) | 16 | if (!dev->power.power_state.event) |
| 17 | return; | 17 | return; |
| 18 | if (!resume_device(dev)) | 18 | if (!resume_device(dev)) |
| 19 | dev->power.power_state = 0; | 19 | dev->power.power_state = PMSG_ON; |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | 22 | ||
| @@ -49,10 +49,10 @@ int dpm_runtime_suspend(struct device * dev, pm_message_t state) | |||
| 49 | int error = 0; | 49 | int error = 0; |
| 50 | 50 | ||
| 51 | down(&dpm_sem); | 51 | down(&dpm_sem); |
| 52 | if (dev->power.power_state == state) | 52 | if (dev->power.power_state.event == state.event) |
| 53 | goto Done; | 53 | goto Done; |
| 54 | 54 | ||
| 55 | if (dev->power.power_state) | 55 | if (dev->power.power_state.event) |
| 56 | runtime_resume(dev); | 56 | runtime_resume(dev); |
| 57 | 57 | ||
| 58 | if (!(error = suspend_device(dev, state))) | 58 | if (!(error = suspend_device(dev, state))) |
diff --git a/drivers/base/power/suspend.c b/drivers/base/power/suspend.c index 2ccee3763acf..50501764d050 100644 --- a/drivers/base/power/suspend.c +++ b/drivers/base/power/suspend.c | |||
| @@ -40,22 +40,22 @@ int suspend_device(struct device * dev, pm_message_t state) | |||
| 40 | int error = 0; | 40 | int error = 0; |
| 41 | 41 | ||
| 42 | down(&dev->sem); | 42 | down(&dev->sem); |
| 43 | if (dev->power.power_state) { | 43 | if (dev->power.power_state.event) { |
| 44 | dev_dbg(dev, "PM: suspend %d-->%d\n", | 44 | dev_dbg(dev, "PM: suspend %d-->%d\n", |
| 45 | dev->power.power_state, state); | 45 | dev->power.power_state.event, state.event); |
| 46 | } | 46 | } |
| 47 | if (dev->power.pm_parent | 47 | if (dev->power.pm_parent |
| 48 | && dev->power.pm_parent->power.power_state) { | 48 | && dev->power.pm_parent->power.power_state.event) { |
| 49 | dev_err(dev, | 49 | dev_err(dev, |
| 50 | "PM: suspend %d->%d, parent %s already %d\n", | 50 | "PM: suspend %d->%d, parent %s already %d\n", |
| 51 | dev->power.power_state, state, | 51 | dev->power.power_state.event, state.event, |
| 52 | dev->power.pm_parent->bus_id, | 52 | dev->power.pm_parent->bus_id, |
| 53 | dev->power.pm_parent->power.power_state); | 53 | dev->power.pm_parent->power.power_state.event); |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | dev->power.prev_state = dev->power.power_state; | 56 | dev->power.prev_state = dev->power.power_state; |
| 57 | 57 | ||
| 58 | if (dev->bus && dev->bus->suspend && !dev->power.power_state) { | 58 | if (dev->bus && dev->bus->suspend && !dev->power.power_state.event) { |
| 59 | dev_dbg(dev, "suspending\n"); | 59 | dev_dbg(dev, "suspending\n"); |
| 60 | error = dev->bus->suspend(dev, state); | 60 | error = dev->bus->suspend(dev, state); |
| 61 | } | 61 | } |
diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c index f82b3df9545f..8d04fb435c17 100644 --- a/drivers/base/power/sysfs.c +++ b/drivers/base/power/sysfs.c | |||
| @@ -26,19 +26,19 @@ | |||
| 26 | 26 | ||
| 27 | static ssize_t state_show(struct device * dev, struct device_attribute *attr, char * buf) | 27 | static ssize_t state_show(struct device * dev, struct device_attribute *attr, char * buf) |
| 28 | { | 28 | { |
| 29 | return sprintf(buf, "%u\n", dev->power.power_state); | 29 | return sprintf(buf, "%u\n", dev->power.power_state.event); |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | static ssize_t state_store(struct device * dev, struct device_attribute *attr, const char * buf, size_t n) | 32 | static ssize_t state_store(struct device * dev, struct device_attribute *attr, const char * buf, size_t n) |
| 33 | { | 33 | { |
| 34 | u32 state; | 34 | pm_message_t state; |
| 35 | char * rest; | 35 | char * rest; |
| 36 | int error = 0; | 36 | int error = 0; |
| 37 | 37 | ||
| 38 | state = simple_strtoul(buf, &rest, 10); | 38 | state.event = simple_strtoul(buf, &rest, 10); |
| 39 | if (*rest) | 39 | if (*rest) |
| 40 | return -EINVAL; | 40 | return -EINVAL; |
| 41 | if (state) | 41 | if (state.event) |
| 42 | error = dpm_runtime_suspend(dev, state); | 42 | error = dpm_runtime_suspend(dev, state); |
| 43 | else | 43 | else |
| 44 | dpm_runtime_resume(dev); | 44 | dpm_runtime_resume(dev); |
