linux/arch/x86/kernel/apic
Thomas Gleixner 633260fa14 x86/irq: Convey vector as argument and not in ptregs
Device interrupts which go through do_IRQ() or the spurious interrupt
handler have their separate entry code on 64 bit for no good reason.

Both 32 and 64 bit transport the vector number through ORIG_[RE]AX in
pt_regs. Further the vector number is forced to fit into an u8 and is
complemented and offset by 0x80 so it's in the signed character
range. Otherwise GAS would expand the pushq to a 5 byte instruction for any
vector > 0x7F.

Treat the vector number like an error code and hand it to the C function as
argument. This allows to get rid of the extra entry code in a later step.

Simplify the error code push magic by implementing the pushq imm8 via a
'.byte 0x6a, vector' sequence so GAS is not able to screw it up. As the
pushq imm8 is sign extending the resulting error code needs to be truncated
to 8 bits in C code.

Originally-by: Andy Lutomirski <luto@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Andy Lutomirski <luto@kernel.org>
Link: https://lore.kernel.org/r/20200521202118.796915981@linutronix.de
2020-06-11 15:15:11 +02:00
..
apic_common.c x86/apic: Fix signedness bug in APIC ID validity checks 2018-04-10 16:46:39 +02:00
apic_flat_64.c x86/apic/flat64: Remove the IPI shorthand decision logic 2019-07-25 16:12:02 +02:00
apic_noop.c x86/apic: Cleanup the include maze 2019-07-25 16:11:57 +02:00
apic_numachip.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
apic.c x86/irq: Convey vector as argument and not in ptregs 2020-06-11 15:15:11 +02:00
bigsmp_32.c Merge branch 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2019-09-17 12:04:39 -07:00
hw_nmi.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
io_apic.c x86/io_apic: Remove unused function mp_init_irq_at_boot() 2020-05-26 17:01:20 +02:00
ipi.c x86/apic: Share common IPI helpers 2019-07-25 16:12:02 +02:00
local.h x86/apic/x2apic: Implement IPI shorthands support 2019-07-25 16:12:02 +02:00
Makefile x86/PCI: Remove unused HyperTransport interrupt support 2017-11-23 20:18:18 +01:00
msi.c x86/apic/msi: Plug non-maskable MSI affinity race 2020-02-01 09:31:47 +01:00
probe_32.c Merge branch 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2019-09-17 12:04:39 -07:00
probe_64.c x86/apic/flat64: Remove the IPI shorthand decision logic 2019-07-25 16:12:02 +02:00
vector.c Updates for the interrupt subsystem: 2020-03-30 17:35:14 -07:00
x2apic_cluster.c x86/apic/x2apic: Fix a NULL pointer deref when handling a dying cpu 2019-10-15 10:57:09 +02:00
x2apic_phys.c x86/apic/x2apic: Implement IPI shorthands support 2019-07-25 16:12:02 +02:00
x2apic_uv_x.c x86/apic/uv: Remove code for unused distributed GRU mode 2020-05-23 16:19:57 +02:00