summaryrefslogtreecommitdiffstats
path: root/kernel/irq/resend.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-12-11 18:12:06 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2012-12-11 18:12:06 -0800
commitaefb058b0c27dafb15072406fbfd92d2ac2c8790 (patch)
treede24b50221cfdbd8ebedb2add38c6125de604c3d /kernel/irq/resend.c
parent37ea95a959d4a49846ecbf2dd45326b6b34bf049 (diff)
parent04aa530ec04f61875b99c12721162e2964e3318c (diff)
downloadop-kernel-dev-aefb058b0c27dafb15072406fbfd92d2ac2c8790.zip
op-kernel-dev-aefb058b0c27dafb15072406fbfd92d2ac2c8790.tar.gz
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fixes from Ingo Molnar: "Affinity fixes and a nested threaded IRQ handling fix." * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: genirq: Always force thread affinity irq: Set CPU affinity right on thread creation genirq: Provide means to retrigger parent
Diffstat (limited to 'kernel/irq/resend.c')
-rw-r--r--kernel/irq/resend.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c
index 6454db7..9065107 100644
--- a/kernel/irq/resend.c
+++ b/kernel/irq/resend.c
@@ -74,6 +74,14 @@ void check_irq_resend(struct irq_desc *desc, unsigned int irq)
if (!desc->irq_data.chip->irq_retrigger ||
!desc->irq_data.chip->irq_retrigger(&desc->irq_data)) {
#ifdef CONFIG_HARDIRQS_SW_RESEND
+ /*
+ * If the interrupt has a parent irq and runs
+ * in the thread context of the parent irq,
+ * retrigger the parent.
+ */
+ if (desc->parent_irq &&
+ irq_settings_is_nested_thread(desc))
+ irq = desc->parent_irq;
/* Set it pending and activate the softirq: */
set_bit(irq, irqs_resend);
tasklet_schedule(&resend_tasklet);
OpenPOWER on IntegriCloud