kernel_optimize_test/kernel/irq
Thomas Gleixner acd26bcf36 genirq: Provide interrupt injection mechanism
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
2020-03-08 11:06:42 +01:00
..
affinity.c genirq/affinity: Remove const qualifier from node_to_cpumask argument 2019-08-28 12:20:43 +02:00
autoprobe.c genirq: Delay deactivation in free_irq() 2019-07-03 10:12:28 +02:00
chip.c genirq: Provide interrupt injection mechanism 2020-03-08 11:06:42 +01:00
cpuhotplug.c genirq, sched/isolation: Isolate from handling managed interrupts 2020-01-22 16:29:49 +01:00
debug.h
debugfs.c genirq: Provide interrupt injection mechanism 2020-03-08 11:06:42 +01:00
devres.c
dummychip.c
generic-chip.c
handle.c
internals.h genirq: Provide interrupt injection mechanism 2020-03-08 11:06:42 +01:00
ipi.c
irq_sim.c
irqdesc.c genirq: Add protection against unsafe usage of generic_handle_irq() 2020-03-08 11:06:40 +01:00
irqdomain.c irqdomain: Fix function documentation of __irq_domain_alloc_fwnode() 2020-03-08 11:02:24 +01:00
Kconfig genirq: Provide interrupt injection mechanism 2020-03-08 11:06:42 +01:00
Makefile genirq/timings: Add selftest for circular array 2019-06-12 10:47:04 +02:00
manage.c genirq/proc: Reject invalid affinity masks (again) 2020-02-14 09:43:17 +01:00
matrix.c
migration.c
msi.c x86/apic/msi: Plug non-maskable MSI affinity race 2020-02-01 09:31:47 +01:00
pm.c PCI: irq: Introduce rearm_wake_irq() 2019-07-23 09:37:51 +02:00
proc.c genirq/proc: Reject invalid affinity masks (again) 2020-02-14 09:43:17 +01:00
resend.c genirq: Provide interrupt injection mechanism 2020-03-08 11:06:42 +01:00
settings.h
spurious.c genirq: Add missing __must_hold() sparse annotation 2020-01-09 18:03:37 +01:00
timings.c genirq/timings: Add selftest for next event computation 2019-06-12 10:47:05 +02:00