From d506489999755970d80b3319f25fe0bc641856fd Mon Sep 17 00:00:00 2001 From: "Charles E. Youse" Date: Fri, 26 Jul 2019 08:25:18 -0700 Subject: [PATCH] arch/x86: optimize nested IRQ entry/exit We don't need to save the ABI caller-save registers here, because we don't preempt threads from nested IRQ contexts. Signed-off-by: Charles E. Youse --- arch/x86/core/intel64/locore.S | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/arch/x86/core/intel64/locore.S b/arch/x86/core/intel64/locore.S index 2c1a4ad5fe3..75c00c27ebe 100644 --- a/arch/x86/core/intel64/locore.S +++ b/arch/x86/core/intel64/locore.S @@ -435,8 +435,8 @@ irq: * if we're a nested interrupt, we have to dump the state to the * stack. we play some games here to re-arrange the stack thusly: * - * SS RSP RFLAGS CS RIP RAX RSI RCX RDX RBX - * RDI RBP R8 R9 R10 R11 R12 R13 R14 R15 + * SS RSP RFLAGS CS RIP RAX RSI + * RCX RDX RDI R8 R9 R10 R11 * X86_FXSAVE_SIZE bytes of SSE data <-- RSP points here * * note that the final value of RSP must be 16-byte aligned here, @@ -448,17 +448,11 @@ irq_enter_nested: /* Nested IRQ: dump register state to stack. */ movq 16(%rsp), %rcx /* RCX = vector */ movq %rax, 16(%rsp) /* looks like we pushed RAX, not the vector */ pushq %rdx - pushq %rbx pushq %rdi - pushq %rbp pushq %r8 pushq %r9 pushq %r10 pushq %r11 - pushq %r12 - pushq %r13 - pushq %r14 - pushq %r15 subq $X86_FXSAVE_SIZE, %rsp fxsave (%rsp) jmp irq_dispatch @@ -518,17 +512,11 @@ irq_dispatch: irq_exit_nested: fxrstor (%rsp) addq $X86_FXSAVE_SIZE, %rsp - popq %r15 - popq %r14 - popq %r13 - popq %r12 popq %r11 popq %r10 popq %r9 popq %r8 - popq %rbp popq %rdi - popq %rbx popq %rdx popq %rcx popq %rsi