mtrr atomicity fix
authorAndrew Morton <akpm@linux-foundation.org>
Sun, 3 Jun 2007 20:50:40 +0000 (13:50 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Mon, 4 Jun 2007 20:25:09 +0000 (13:25 -0700)
Rafael gets this on an SMP box with kernel preemption enabled, during
hibernation and restore (100% of the time):

Enabling non-boot CPUs ...
BUG: using smp_processor_id() in preemptible [00000001] code: bash/4514
caller is mtrr_save_state+0x9/0x40

Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/i386/kernel/cpu/mtrr/main.c

index 1cf466df330ad567c26355aeda582b98196534ae..7202b98aac4f2f53516e421ef935545538e5466a 100644 (file)
@@ -734,10 +734,13 @@ void mtrr_ap_init(void)
  */
 void mtrr_save_state(void)
 {
-       if (smp_processor_id() == 0)
+       int cpu = get_cpu();
+
+       if (cpu == 0)
                mtrr_save_fixed_ranges(NULL);
        else
                smp_call_function_single(0, mtrr_save_fixed_ranges, NULL, 1, 1);
+       put_cpu();
 }
 
 static int __init mtrr_init_finialize(void)