]> err.no Git - linux-2.6/commitdiff
[PATCH] x86_64 irq_regs fix
authorAndrew Morton <akpm@osdl.org>
Fri, 6 Oct 2006 20:28:09 +0000 (13:28 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 6 Oct 2006 20:36:52 +0000 (13:36 -0700)
smp_apic_timer_interrupt() needs to stack the pt_regs* for profile_tick.

If any other of those APIC interrupt handlers want to run get_irq_regs() then
their C entrypoint handlers will need the same treatment.

Cc: Andi Kleen <ak@muc.de>
Cc: David Howells <dhowells@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Acked-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/x86_64/kernel/apic.c

index af4a1c71a80ddd971b144c9c1dddab03aff81331..4d9d5ed942b293f3383c42beb3418373143050ea 100644 (file)
@@ -913,8 +913,10 @@ void smp_local_timer_interrupt(void)
  * [ if a single-CPU system runs an SMP kernel then we call the local
  *   interrupt as well. Thus we cannot inline the local irq ... ]
  */
-void smp_apic_timer_interrupt(void)
+void smp_apic_timer_interrupt(struct pt_regs *regs)
 {
+       struct pt_regs *old_regs = set_irq_regs(regs);
+
        /*
         * the NMI deadlock-detector uses this.
         */
@@ -934,6 +936,7 @@ void smp_apic_timer_interrupt(void)
        irq_enter();
        smp_local_timer_interrupt();
        irq_exit();
+       set_irq_regs(old_regs);
 }
 
 /*