x86: irq: fix apicinterrupts on 64 bits

Impact: Fix interrupt via the apicinterrupt macro

Checkin 939b787130 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>
这个提交包含在:
Alexander van Heukelum
2008-11-13 13:50:20 +01:00
提交者 H. Peter Anvin
父节点 8665596ec0
当前提交 722024dbb7

查看文件

@@ -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: