TencentOS-kernel/kernel/irq
Thomas Gleixner e725b59616 Intel:genirq: Provide interrupt injection mechanism
commit acd26bcf362708594ea081ef55140e37d0854ed2 upstream.
Backport summary: for 5.4 kernel ICX PCIe Gen4 support.

Error injection mechanisms need a half ways safe way to inject interrupts as
invoking generic_handle_irq() or the actual device interrupt handler
directly from e.g. a debugfs write is not guaranteed to be safe.

On x86 generic_handle_irq() is unsafe due to the hardware trainwreck which
is the base of x86 interrupt delivery and affinity management.

Move the irq debugfs injection code into a separate function which can be
used by error injection code as well.

The implementation prevents at least that state is corrupted, but it cannot
close a very tiny race window on x86 which might result in a stale and not
serviced device interrupt under very unlikely circumstances.

This is explicitly for debugging and testing and not for production use or
abuse in random driver code.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Acked-by: Marc Zyngier <maz@kernel.org>
Link: https://lkml.kernel.org/r/20200306130623.990928309@linutronix.de

(cherry picked from commit acd26bcf362708594ea081ef55140e37d0854ed2)
Signed-off-by: Ethan Zhao <haifeng.zhao@intel.com>
2021-04-25 14:31:13 +08:00
..
Kconfig Intel:genirq: Provide interrupt injection mechanism 2021-04-25 14:31:13 +08:00
Makefile Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
affinity.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
autoprobe.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
chip.c Intel:genirq: Provide interrupt injection mechanism 2021-04-25 14:31:13 +08:00
cpuhotplug.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
debug.h Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
debugfs.c Intel:genirq: Provide interrupt injection mechanism 2021-04-25 14:31:13 +08:00
devres.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
dummychip.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
generic-chip.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
handle.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
internals.h Intel:genirq: Provide interrupt injection mechanism 2021-04-25 14:31:13 +08:00
ipi.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
irq_sim.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
irqdesc.c Intel:genirq: Add protection against unsafe usage of generic_handle_irq() 2021-04-25 14:31:13 +08:00
irqdomain.c genirq/irqdomain: Don't try to free an interrupt that has no mapping 2021-03-16 16:42:56 +08:00
manage.c genirq: Disable interrupts for force threaded handlers 2021-04-12 12:53:21 +08:00
matrix.c genirq/matrix: Deal with the sillyness of for_each_cpu() on UP 2021-03-16 16:35:14 +08:00
migration.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
msi.c genirq/msi: Activate Multi-MSI early when MSI_FLAG_ACTIVATE_EARLY is set 2021-04-12 12:51:55 +08:00
pm.c genirq/PM: Always unlock IRQ descriptor in rearm_wake_irq() 2021-03-16 16:33:58 +08:00
proc.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
resend.c Intel:genirq: Provide interrupt injection mechanism 2021-04-25 14:31:13 +08:00
settings.h Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
spurious.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
timings.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00