|
@@ -138,7 +138,8 @@ irqreturn_t handle_irq_event_percpu(struct irq_desc *desc)
|
|
unsigned int flags = 0, irq = desc->irq_data.irq;
|
|
unsigned int flags = 0, irq = desc->irq_data.irq;
|
|
struct irqaction *action = desc->action;
|
|
struct irqaction *action = desc->action;
|
|
|
|
|
|
- do {
|
|
|
|
|
|
+ /* action might have become NULL since we dropped the lock */
|
|
|
|
+ while (action) {
|
|
irqreturn_t res;
|
|
irqreturn_t res;
|
|
|
|
|
|
trace_irq_handler_entry(irq, action);
|
|
trace_irq_handler_entry(irq, action);
|
|
@@ -173,7 +174,7 @@ irqreturn_t handle_irq_event_percpu(struct irq_desc *desc)
|
|
|
|
|
|
retval |= res;
|
|
retval |= res;
|
|
action = action->next;
|
|
action = action->next;
|
|
- } while (action);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
add_interrupt_randomness(irq, flags);
|
|
add_interrupt_randomness(irq, flags);
|
|
|
|
|