diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2008-01-10 19:22:23 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2008-02-01 18:30:58 -0500 |
commit | af258f516b3e4e214121f5d6d53cab32ce0d8010 (patch) | |
tree | 9ae8987d51217316aecfc0c04806cc6970cd69e6 /kernel/power/main.c | |
parent | 17b7a89cfb6ea2ff103785f9b2580e5138b6cfd1 (diff) |
Suspend: Invoke suspend notifications after console switch
In order to fix APM emulation it is necessary to enable apm-emulation
notifications for suspends triggered in various ways via the suspend
notifiers. However, this will cause the systems using APM emulation
to lock up between X being needed to switch away from the VT and X
already waiting for resume in the APM ioctl.
This patch moves the console switch (if enabled) before the suspend
notification (and after the resume notification) to avoid this issue.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'kernel/power/main.c')
-rw-r--r-- | kernel/power/main.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/kernel/power/main.c b/kernel/power/main.c index e47214cfeb2d..6a6d5eb3524e 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c | |||
@@ -175,12 +175,12 @@ static int suspend_prepare(void) | |||
175 | if (!suspend_ops || !suspend_ops->enter) | 175 | if (!suspend_ops || !suspend_ops->enter) |
176 | return -EPERM; | 176 | return -EPERM; |
177 | 177 | ||
178 | pm_prepare_console(); | ||
179 | |||
178 | error = pm_notifier_call_chain(PM_SUSPEND_PREPARE); | 180 | error = pm_notifier_call_chain(PM_SUSPEND_PREPARE); |
179 | if (error) | 181 | if (error) |
180 | goto Finish; | 182 | goto Finish; |
181 | 183 | ||
182 | pm_prepare_console(); | ||
183 | |||
184 | if (suspend_freeze_processes()) { | 184 | if (suspend_freeze_processes()) { |
185 | error = -EAGAIN; | 185 | error = -EAGAIN; |
186 | goto Thaw; | 186 | goto Thaw; |
@@ -200,9 +200,9 @@ static int suspend_prepare(void) | |||
200 | 200 | ||
201 | Thaw: | 201 | Thaw: |
202 | suspend_thaw_processes(); | 202 | suspend_thaw_processes(); |
203 | pm_restore_console(); | ||
204 | Finish: | 203 | Finish: |
205 | pm_notifier_call_chain(PM_POST_SUSPEND); | 204 | pm_notifier_call_chain(PM_POST_SUSPEND); |
205 | pm_restore_console(); | ||
206 | return error; | 206 | return error; |
207 | } | 207 | } |
208 | 208 | ||
@@ -309,8 +309,8 @@ int suspend_devices_and_enter(suspend_state_t state) | |||
309 | static void suspend_finish(void) | 309 | static void suspend_finish(void) |
310 | { | 310 | { |
311 | suspend_thaw_processes(); | 311 | suspend_thaw_processes(); |
312 | pm_restore_console(); | ||
313 | pm_notifier_call_chain(PM_POST_SUSPEND); | 312 | pm_notifier_call_chain(PM_POST_SUSPEND); |
313 | pm_restore_console(); | ||
314 | } | 314 | } |
315 | 315 | ||
316 | 316 | ||