resend.c (2a0d6fb335d4428285dab2d254911748e6040807) resend.c (876dbd4cc1b35c1a4cb96a2be1d43ea0eabce3b4)
1/*
2 * linux/kernel/irq/resend.c
3 *
4 * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar
5 * Copyright (C) 2005-2006, Thomas Gleixner
6 *
7 * This file contains the IRQ-resend code
8 *

--- 46 unchanged lines hidden (view full) ---

55 */
56void check_irq_resend(struct irq_desc *desc, unsigned int irq)
57{
58 /*
59 * We do not resend level type interrupts. Level type
60 * interrupts are resent by hardware when they are still
61 * active.
62 */
1/*
2 * linux/kernel/irq/resend.c
3 *
4 * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar
5 * Copyright (C) 2005-2006, Thomas Gleixner
6 *
7 * This file contains the IRQ-resend code
8 *

--- 46 unchanged lines hidden (view full) ---

55 */
56void check_irq_resend(struct irq_desc *desc, unsigned int irq)
57{
58 /*
59 * We do not resend level type interrupts. Level type
60 * interrupts are resent by hardware when they are still
61 * active.
62 */
63 if (desc->status & IRQ_LEVEL)
63 if (irq_settings_is_level(desc))
64 return;
65 if (desc->istate & IRQS_REPLAY)
66 return;
67 if (desc->istate & IRQS_PENDING) {
68 irq_compat_clr_pending(desc);
69 desc->istate &= ~IRQS_PENDING;
70 desc->istate |= IRQS_REPLAY;
71
72 if (!desc->irq_data.chip->irq_retrigger ||
73 !desc->irq_data.chip->irq_retrigger(&desc->irq_data)) {
74#ifdef CONFIG_HARDIRQS_SW_RESEND
75 /* Set it pending and activate the softirq: */
76 set_bit(irq, irqs_resend);
77 tasklet_schedule(&resend_tasklet);
78#endif
79 }
80 }
81}
64 return;
65 if (desc->istate & IRQS_REPLAY)
66 return;
67 if (desc->istate & IRQS_PENDING) {
68 irq_compat_clr_pending(desc);
69 desc->istate &= ~IRQS_PENDING;
70 desc->istate |= IRQS_REPLAY;
71
72 if (!desc->irq_data.chip->irq_retrigger ||
73 !desc->irq_data.chip->irq_retrigger(&desc->irq_data)) {
74#ifdef CONFIG_HARDIRQS_SW_RESEND
75 /* Set it pending and activate the softirq: */
76 set_bit(irq, irqs_resend);
77 tasklet_schedule(&resend_tasklet);
78#endif
79 }
80 }
81}