aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/irq/chip.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2011-02-10 15:14:20 +0100
committerThomas Gleixner <tglx@linutronix.de>2011-02-19 12:58:24 +0100
commit781295762defc709a609efc01d8bb065276cd9a2 (patch)
tree21f035b5f92571c8c3559b5e94eb0e1aa4113a36 /kernel/irq/chip.c
parentgenirq: Consolidate set_chip_handler functions (diff)
downloadlinux-dev-781295762defc709a609efc01d8bb065276cd9a2.tar.xz
linux-dev-781295762defc709a609efc01d8bb065276cd9a2.zip
genirq: Add preflow handler support
sparc64 needs to call a preflow handler on certain interrupts befor calling the action chain. Integrate it into handle_fasteoi_irq. Must be enabled via CONFIG_IRQ_FASTEOI_PREFLOW. No impact when disabled. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel/irq/chip.c')
-rw-r--r--kernel/irq/chip.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index 2a36038b8f59..08be5d182be3 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -471,6 +471,16 @@ out_unlock:
}
EXPORT_SYMBOL_GPL(handle_level_irq);
+#ifdef CONFIG_IRQ_PREFLOW_FASTEOI
+static inline void preflow_handler(struct irq_desc *desc)
+{
+ if (desc->preflow_handler)
+ desc->preflow_handler(&desc->irq_data);
+}
+#else
+static inline void preflow_handler(struct irq_desc *desc) { }
+#endif
+
/**
* handle_fasteoi_irq - irq handler for transparent controllers
* @irq: the interrupt number
@@ -503,6 +513,7 @@ handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc)
mask_irq(desc);
goto out;
}
+ preflow_handler(desc);
handle_irq_event(desc);
out:
desc->irq_data.chip->irq_eoi(&desc->irq_data);