]> Pileus Git - ~andy/linux/blobdiff - kernel/irq/resend.c
Merge tag 'for-3.8' of git://openrisc.net/~jonas/linux
[~andy/linux] / kernel / irq / resend.c
index 6454db7b6a4d18ae2e4feb67dc7a572a5d8deac4..9065107f083e90e3fbd3c38f2fbc164d11ff2b3c 100644 (file)
@@ -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);