From: Stefan Seyfried From: Pavel Machek This actually calls highmem_resume(), so swsusp has chance to work on highmem machines. It also adds comments about code flow, which is quite interesting at that point. Signed-off-by: Andrew Morton Signed-off-by: Andrew Morton --- 25-akpm/kernel/power/swsusp.c | 7 +++++++ 1 files changed, 7 insertions(+) diff -puN kernel/power/swsusp.c~swsusp-fix-highmem kernel/power/swsusp.c --- 25/kernel/power/swsusp.c~swsusp-fix-highmem Wed Sep 22 16:42:11 2004 +++ 25-akpm/kernel/power/swsusp.c Wed Sep 22 16:42:11 2004 @@ -860,7 +860,9 @@ int swsusp_suspend(void) local_irq_disable(); save_processor_state(); error = swsusp_arch_suspend(); + /* Restore control flow magically appears here */ restore_processor_state(); + restore_highmem(); local_irq_enable(); return error; } @@ -880,8 +882,13 @@ int swsusp_resume(void) { int error; local_irq_disable(); + /* We'll ignore saved state, but this gets preempt count (etc) right */ save_processor_state(); error = swsusp_arch_resume(); + /* Code below is only ever reached in case of failure. Otherwise + * execution continues at place where swsusp_arch_suspend was called + */ + BUG_ON(!error); restore_processor_state(); restore_highmem(); local_irq_enable(); _