Hibernation: Document __save_processor_state() on x86-64 (rev. 2)
PATCH 1/1 Hibernation: Document __save_processor_state() on x86-64 (rev. 2)
From: Rafael J. Wysocki <[email protected]>
Document the fact that __save_processor_state() has to save all CPU registers referred to by the kernel in case a different kernel is used to load and restore a hibernation image containing it.
--- arch/x86/kernel/suspend_64.c | 20 ++++++++++++++++++++ include/asm-x86/suspend_64.h | 9 ++++++++- 2 files changed, 28 insertions(+), 1 deletion(-)
arch/x86/kernel/suspend_64.c +20 -0
@@ -19,6 +19,21 @@ extern const void __nosave_begin, __nosastruct saved_context saved_context; +/** +* __save_processor_state - save CPU registers before creating a +* hibernation image and before restoring the memory state from it +* @ctxt - structure to store the registers contents in +* +* NOTE: If there is a CPU register the modification of which by the +* boot kernel (ie. the kernel used for loading the hibernation image) +* might affect the operations of the restored target kernel (ie. the one +* saved in the hibernation image), then its contents must be saved by this +* function. In other words, if kernel A is hibernated and different +* kernel B is used for loading the hibernation image into memory, the +* kernel A's __save_processor_state() function must save all registers +* needed by kernel A, so that it can operate correctly after the resume +* regardless of what kernel B does in the meantime. +*/ void __save_processor_state (struct saved_context *ctxt) {kernel_fpu_begin ();
@@ -69,6 +84,11 @@ static void do_fpu_end(void)kernel_fpu_end (); } +/** +* __restore_processor_state - restore the contents of CPU registers saved +* by __save_processor_state() +* @ctxt - structure to load the registers contents from +*/ void __restore_processor_state (struct saved_context *ctxt) {/*
include/asm-x86/suspend_64.h +8 -1
@@ -15,7 +15,14 @@ arch_prepare_suspend(void)return 0 ; } -/* Image of the saved processor state. If you touch this, fix acpi/wakeup.S. */ +/* +* Image of the saved processor state, used by the low level ACPI suspend to +* RAM code and by the low level hibernation code. +* +* If you modify it, fix arch/x86/kernel/acpi/wakeup_64.S and make sure that +* __save/__restore_processor_state(), defined in arch/x86/kernel/suspend_64.c, +* still work as required. +*/ struct saved_context {struct pt_regs regs;u16 ds, es, fs, gs, ss;
Quoted 7 lines · Rafael J. Wysocki
From: Rafael J. Wysocki <[email protected]>
Document the fact that
__save_processor_state()has to save all CPU registers referred to by the kernel in case a different kernel is used to load and restore a hibernation image containing it.Sigend-off-by Rafael J. Wysocki <[email protected]>
ACK.
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Quoted 10 lines · Pavel Machek
Quoted 7 lines · Rafael J. Wysocki
From: Rafael J. Wysocki <[email protected]>
Document the fact that
__save_processor_state()has to save all CPU registers referred to by the kernel in case a different kernel is used to load and restore a hibernation image containing it.Sigend-off-by Rafael J. Wysocki <[email protected]>ACK.
Thanks!
Ingo, can you please take this patch for 2.6.25 or should I forward it to Len?
Rafael
Quoted 4 lines · Rafael J. Wysocki
Quoted 4 lines
Quoted 4 lines
Document the fact that
__save_processor_state()has to save all CPU registers referred to by the kernel in case a different kernel is used to load and restore a hibernation image containing it.
Quoted 8 lines
Quoted 3 lines
Quoted 1 line
Sigend-off-by Rafael J. Wysocki <[email protected]>ACK.
Thanks!
Ingo, can you please take this patch for 2.6.25 or should I forward it to Len?
sure, applied it to x86.git. I've also zapped the cr8 elimination patch.
Ingo
Quoted 4 lines · Rafael J. Wysocki
Quoted 4 lines
Quoted 4 lines
Document the fact that
__save_processor_state()has to save all CPU registers referred to by the kernel in case a different kernel is used to load and restore a hibernation image containing it.
Quoted 8 lines
Quoted 3 lines
Quoted 1 line
Sigend-off-by Rafael J. Wysocki <[email protected]>ACK.
Thanks!
Ingo, can you please take this patch for 2.6.25 or should I forward it to Len?
sure, applied it to x86.git. I've also zapped the cr8 elimination patch.
Ingo
Quoted 7 lines · Rafael J. Wysocki
From: Rafael J. Wysocki <[email protected]>
Document the fact that
__save_processor_state()has to save all CPU registers referred to by the kernel in case a different kernel is used to load and restore a hibernation image containing it.Sigend-off-by Rafael J. Wysocki <[email protected]>
ACK.
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html