aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/entry_64.S
diff options
context:
space:
mode:
authorAlexander van Heukelum <heukelum@mailshack.com>2008-11-13 07:50:20 -0500
committerH. Peter Anvin <hpa@zytor.com>2008-11-13 20:28:38 -0500
commit722024dbb74f3ea316c285c0a71a4512e113b0c4 (patch)
treeaafc0c6bd82275ca8c6c387521e0d7ecfcdd2e07 /arch/x86/kernel/entry_64.S
parent8665596ec05498525014436520b316ba174a068a (diff)
x86: irq: fix apicinterrupts on 64 bits
Impact: Fix interrupt via the apicinterrupt macro Checkin 939b787130bf22887a09d8fd2641a094dcef8c22 changed the "interrupt" macro, but the "interrupt" macro is also invoked indirectly from the "apicinterrupt" macro. The "apicinterrupt" macro probably should have its own collection of systematic stubs for the same reason the main IRQ code does; as is it is a huge amount of replicated code. Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/kernel/entry_64.S')
-rw-r--r--arch/x86/kernel/entry_64.S8
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 2b42362a85b2..369de6973c58 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -675,9 +675,8 @@ END(interrupt)
675 * Entry runs with interrupts off. 675 * Entry runs with interrupts off.
676 */ 676 */
677 677
678/* 0(%rsp): ~(interrupt number)+0x80 */ 678/* 0(%rsp): ~(interrupt number) */
679 .macro interrupt func 679 .macro interrupt func
680 addq $-0x80,(%rsp) /* Adjust vector to [-256,-1] range */
681 cld 680 cld
682 SAVE_ARGS 681 SAVE_ARGS
683 leaq -ARGOFFSET(%rsp),%rdi /* arg1 for handler */ 682 leaq -ARGOFFSET(%rsp),%rdi /* arg1 for handler */
@@ -711,9 +710,14 @@ END(interrupt)
711 call \func 710 call \func
712 .endm 711 .endm
713 712
713 /*
714 * The interrupt stubs push (~vector+0x80) onto the stack and
715 * then jump to common_interrupt.
716 */
714 .p2align CONFIG_X86_L1_CACHE_SHIFT 717 .p2align CONFIG_X86_L1_CACHE_SHIFT
715common_interrupt: 718common_interrupt:
716 XCPT_FRAME 719 XCPT_FRAME
720 addq $-0x80,(%rsp) /* Adjust vector to [-256,-1] range */
717 interrupt do_IRQ 721 interrupt do_IRQ
718 /* 0(%rsp): oldrsp-ARGOFFSET */ 722 /* 0(%rsp): oldrsp-ARGOFFSET */
719ret_from_intr: 723ret_from_intr: