x86_64: Cleanup root IRQ trampolines, align with i386
PATCH 4/4 x86_64: Cleanup root IRQ trampolines, align with i386
This patch reduces the xirq_handler trampoline to the required minimum and refactors call_root_virq_handler in the same manner. At this chance, it reorders the execution of irq_exit in the virq path in the same way as i386 does. I bet the current order was bogus, given that it first ran the Linux IRQ epilogue and _then_ called irq_exit...
Jan
--- arch/x86_64/kernel/entry.S | 23 ------------------ include/asm-x86_64/ipipe.h | 55 ++++++++++++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 40 deletions(-)
arch/x86_64/kernel/entry.S +1 -22
@@ -580,28 +580,8 @@ END(stub_rt_sigreturn) #endif .endm -#ifdef CONFIG_IPIPE - - /* %rdi=virq number, %rsi=cookie, %rdx=handler */ -ENTRY(__ipipe_root_virq_thunk) - movq %rsp, %rax - pushq $0 - pushq %rax - pushfq - pushq $__KERNEL_CS - pushq $1f - pushq $-1 - XCPT_FRAME - SAVE_ARGS - call *%rdx - jmp exit_intr - CFI_ENDPROC -1: - cli - ret -END(__ipipe_root_virq_thunk) - ENTRY(common_interrupt) +#ifdef CONFIG_IPIPE XCPT_FRAME interrupt __ipipe_handle_irq testl %eax, %eax
@@ -615,7 +595,6 @@ ENTRY(common_interrupt) swapgs jmp restore_args #else /* !CONFIG_IPIPE */ -ENTRY(common_interrupt) XCPT_FRAME interrupt do_IRQ #endif /* !CONFIG_IPIPE */
include/asm-x86_64/ipipe.h +37 -18
79 lines not on this page · raw message