summaryrefslogtreecommitdiffstats
path: root/kernel/irq/internals.h
diff options
context:
space:
mode:
authorKeith Busch <keith.busch@intel.com>2016-06-18 00:00:20 +0200
committerThomas Gleixner <tglx@linutronix.de>2016-06-18 10:00:55 +0200
commitedd14cfebc4404698544d407ecf8eda6e19aa19e (patch)
treec8e821937f59152ba61129fdcfda0d52416302f8 /kernel/irq/internals.h
parentirqchip/mips-gic: Populate irq_domain names (diff)
downloadlinux-edd14cfebc4404698544d407ecf8eda6e19aa19e.tar.xz
linux-edd14cfebc4404698544d407ecf8eda6e19aa19e.zip
genirq: Add untracked irq handler
This adds a software irq handler for controllers that multiplex interrupts from multiple devices, but don't know which device generated the interrupt. For these devices, the irq handler that demuxes must check every action for every software irq using the same h/w irq in order to find out which device generated the interrupt. This will inevitably trigger spurious interrupt detection if we are noting the irq. The new irq handler does not track the handling for spurious interrupt detection. An irq that uses this also won't get stats tracked since it didn't generate the interrupt, nor added to randomness since they are not random. Signed-off-by: Keith Busch <keith.busch@intel.com> Cc: Bjorn Helgaas <bhelgaas@google.com> Cc: linux-pci@vger.kernel.org Cc: Jon Derrick <jonathan.derrick@intel.com> Link: http://lkml.kernel.org/r/1466200821-29159-1-git-send-email-keith.busch@intel.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/irq/internals.h')
-rw-r--r--kernel/irq/internals.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h
index d5edcdc9382a..0c6f35ba9cc0 100644
--- a/kernel/irq/internals.h
+++ b/kernel/irq/internals.h
@@ -84,6 +84,7 @@ extern void irq_mark_irq(unsigned int irq);
extern void init_kstat_irqs(struct irq_desc *desc, int node, int nr);
+irqreturn_t __handle_irq_event_percpu(struct irq_desc *desc, unsigned int *flags);
irqreturn_t handle_irq_event_percpu(struct irq_desc *desc);
irqreturn_t handle_irq_event(struct irq_desc *desc);