summaryrefslogtreecommitdiff
path: root/arch/x86/kernel/entry_64.S
diff options
context:
space:
mode:
authorAlexander van Heukelum <heukelum@mailshack.com>2008-11-13 12:50:20 (GMT)
committerH. Peter Anvin <hpa@zytor.com>2008-11-14 01:28:38 (GMT)
commit722024dbb74f3ea316c285c0a71a4512e113b0c4 (patch)
treeaafc0c6bd82275ca8c6c387521e0d7ecfcdd2e07 /arch/x86/kernel/entry_64.S
parent8665596ec05498525014436520b316ba174a068a (diff)
downloadlinux-fsl-qoriq-722024dbb74f3ea316c285c0a71a4512e113b0c4.tar.xz
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 2b42362..369de69 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -675,9 +675,8 @@ END(interrupt)
* Entry runs with interrupts off.
*/
-/* 0(%rsp): ~(interrupt number)+0x80 */
+/* 0(%rsp): ~(interrupt number) */
.macro interrupt func
- addq $-0x80,(%rsp) /* Adjust vector to [-256,-1] range */
cld
SAVE_ARGS
leaq -ARGOFFSET(%rsp),%rdi /* arg1 for handler */
@@ -711,9 +710,14 @@ END(interrupt)
call \func
.endm
+ /*
+ * The interrupt stubs push (~vector+0x80) onto the stack and
+ * then jump to common_interrupt.
+ */
.p2align CONFIG_X86_L1_CACHE_SHIFT
common_interrupt:
XCPT_FRAME
+ addq $-0x80,(%rsp) /* Adjust vector to [-256,-1] range */
interrupt do_IRQ
/* 0(%rsp): oldrsp-ARGOFFSET */
ret_from_intr: