x86, kvm: Call restore_sched_clock_state() only after %gs is initialized
authorMarcelo Tosatti <mtosatti@redhat.com>
Sun, 1 Apr 2012 16:53:36 +0000 (13:53 -0300)
committerIngo Molnar <mingo@kernel.org>
Mon, 2 Apr 2012 11:53:00 +0000 (13:53 +0200)
s2ram broke due to this KVM commit:

  b74f05d61b73 x86: kvmclock: abstract save/restore sched_clock_state

restore_sched_clock_state() methods use percpu data, therefore
they must run after %gs is initialized, but before mtrr_bp_restore()
(due to lockstat using sched_clock).

Move it to the correct place.

Reported-and-tested-by: Konstantin Khlebnikov <khlebnikov@openvz.org>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Avi Kivity <avi@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/power/cpu.c

index 47936830968c5240497725557be336f6fed112c9..218cdb16163c3ae7026a40f95f06dd139a862db8 100644 (file)
@@ -225,13 +225,13 @@ static void __restore_processor_state(struct saved_context *ctxt)
        fix_processor_context();
 
        do_fpu_end();
        fix_processor_context();
 
        do_fpu_end();
+       x86_platform.restore_sched_clock_state();
        mtrr_bp_restore();
 }
 
 /* Needed by apm.c */
 void restore_processor_state(void)
 {
        mtrr_bp_restore();
 }
 
 /* Needed by apm.c */
 void restore_processor_state(void)
 {
-       x86_platform.restore_sched_clock_state();
        __restore_processor_state(&saved_context);
 }
 #ifdef CONFIG_X86_32
        __restore_processor_state(&saved_context);
 }
 #ifdef CONFIG_X86_32