x86/vector: Replace IRQ_MOVE_CLEANUP_VECTOR with a timer callback
authorThomas Gleixner <tglx@linutronix.de>
Wed, 21 Jun 2023 17:12:47 +0000 (10:12 -0700)
committerThomas Gleixner <tglx@linutronix.de>
Sun, 6 Aug 2023 12:15:10 +0000 (14:15 +0200)
commitbdc1dad299bb1d38ce329de0dad0beadc76badf4
treec676fc79065a3e283d0fac5b6a1713383845ad87
parenta539cc86a1cb688df24d9cff17d946a8c0b94b38
x86/vector: Replace IRQ_MOVE_CLEANUP_VECTOR with a timer callback

The left overs of a moved interrupt are cleaned up once the interrupt is
raised on the new target CPU. Keeping the vector valid on the original
target CPU guarantees that there can't be an interrupt lost if the affinity
change races with an concurrent interrupt from the device.

This cleanup utilizes the lowest priority interrupt vector for this
cleanup, which makes sure that in the unlikely case when the to be cleaned
up interrupt is pending in the local APICs IRR the cleanup vector does not
live lock.

But there is no real reason to use an interrupt vector for cleaning up the
leftovers of a moved interrupt. It's not a high performance operation. The
only requirement is that it happens on the original target CPU.

Convert it to use a timer instead and adjust the code accordingly.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Xin Li <xin3.li@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20230621171248.6805-3-xin3.li@intel.com
arch/x86/include/asm/idtentry.h
arch/x86/include/asm/irq_vectors.h
arch/x86/kernel/apic/vector.c
arch/x86/kernel/idt.c