Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 722024db authored by Alexander van Heukelum's avatar Alexander van Heukelum Committed by H. Peter Anvin
Browse files

x86: irq: fix apicinterrupts on 64 bits



Impact: Fix interrupt via the apicinterrupt macro

Checkin 939b7871 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: default avatarAlexander van Heukelum <heukelum@fastmail.fm>
Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
parent 8665596e
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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: