diff options
Diffstat (limited to 'kernel/irq/spurious.c')
| -rw-r--r-- | kernel/irq/spurious.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c index 7b5f012bde9d..a1d8cc63b56e 100644 --- a/kernel/irq/spurious.c +++ b/kernel/irq/spurious.c @@ -67,8 +67,13 @@ static int try_one_irq(int irq, struct irq_desc *desc, bool force)  	raw_spin_lock(&desc->lock); -	/* PER_CPU and nested thread interrupts are never polled */ -	if (irq_settings_is_per_cpu(desc) || irq_settings_is_nested_thread(desc)) +	/* +	 * PER_CPU, nested thread interrupts and interrupts explicitely +	 * marked polled are excluded from polling. +	 */ +	if (irq_settings_is_per_cpu(desc) || +	    irq_settings_is_nested_thread(desc) || +	    irq_settings_is_polled(desc))  		goto out;  	/* @@ -268,7 +273,8 @@ try_misrouted_irq(unsigned int irq, struct irq_desc *desc,  void note_interrupt(unsigned int irq, struct irq_desc *desc,  		    irqreturn_t action_ret)  { -	if (desc->istate & IRQS_POLL_INPROGRESS) +	if (desc->istate & IRQS_POLL_INPROGRESS || +	    irq_settings_is_polled(desc))  		return;  	/* we get here again via the threaded handler */  | 
