x86/entry/64: Move ENTER_IRQ_STACK from interrupt macro to interrupt_entry
authorDominik Brodowski <linux@dominikbrodowski.net>
Tue, 20 Feb 2018 21:01:09 +0000 (22:01 +0100)
committerIngo Molnar <mingo@kernel.org>
Wed, 21 Feb 2018 15:54:03 +0000 (16:54 +0100)
commit2ba6474104a1132c4af9f6dc42c6bfe3ca71f8c7
treea6a40e653420bda5392a20ac7af67fd0f3371b7a
parent0e34d226342c27c4f96138b211547d423e4be8a1
x86/entry/64: Move ENTER_IRQ_STACK from interrupt macro to interrupt_entry

Moving the switch to IRQ stack from the interrupt macro to the helper
function requires some trickery: All ENTER_IRQ_STACK really cares about
is where the "original" stack -- meaning the GP registers etc. -- is
stored. Therefore, we need to offset the stored RSP value by 8 whenever
ENTER_IRQ_STACK is called from within a function. In such cases, and
after switching to the IRQ stack, we need to push the "original" return
address (i.e. the return address from the call to the interrupt entry
function) to the IRQ stack.

This trickery allows us to carve another .85k from the text size (it
would be more except for the additional unwind hints):

   text    data     bss     dec     hex filename
  18006       0       0   18006    4656 entry_64.o-orig
  17158       0       0   17158    4306 entry_64.o

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: dan.j.williams@intel.com
Link: http://lkml.kernel.org/r/20180220210113.6725-3-linux@dominikbrodowski.net
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/entry/entry_64.S