diff options
author | Andrew Morton <akpm@osdl.org> | 2006-10-06 16:28:09 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-06 16:36:52 -0400 |
commit | d150ad7bd946f066c98a9725685109dcffae0cba (patch) | |
tree | 8157b0f8690dca44f5644d28f3773afc9badc71b /arch/x86_64 | |
parent | e630015504cdd4d166c371fec39b8ca258fcbc0e (diff) |
[PATCH] x86_64 irq_regs fix
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>
Diffstat (limited to 'arch/x86_64')
-rw-r--r-- | arch/x86_64/kernel/apic.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c index af4a1c71a80d..4d9d5ed942b2 100644 --- a/arch/x86_64/kernel/apic.c +++ b/arch/x86_64/kernel/apic.c | |||
@@ -913,8 +913,10 @@ void smp_local_timer_interrupt(void) | |||
913 | * [ if a single-CPU system runs an SMP kernel then we call the local | 913 | * [ if a single-CPU system runs an SMP kernel then we call the local |
914 | * interrupt as well. Thus we cannot inline the local irq ... ] | 914 | * interrupt as well. Thus we cannot inline the local irq ... ] |
915 | */ | 915 | */ |
916 | void smp_apic_timer_interrupt(void) | 916 | void smp_apic_timer_interrupt(struct pt_regs *regs) |
917 | { | 917 | { |
918 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
919 | |||
918 | /* | 920 | /* |
919 | * the NMI deadlock-detector uses this. | 921 | * the NMI deadlock-detector uses this. |
920 | */ | 922 | */ |
@@ -934,6 +936,7 @@ void smp_apic_timer_interrupt(void) | |||
934 | irq_enter(); | 936 | irq_enter(); |
935 | smp_local_timer_interrupt(); | 937 | smp_local_timer_interrupt(); |
936 | irq_exit(); | 938 | irq_exit(); |
939 | set_irq_regs(old_regs); | ||
937 | } | 940 | } |
938 | 941 | ||
939 | /* | 942 | /* |