diff options
Diffstat (limited to 'kernel/irq/manage.c')
| -rw-r--r-- | kernel/irq/manage.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index ad3eaf2ab959..bf9ae8a8686f 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -1643,8 +1643,13 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)  		}  		if (!((old->flags & new->flags) & IRQF_SHARED) || -		    (oldtype != (new->flags & IRQF_TRIGGER_MASK)) || -		    ((old->flags ^ new->flags) & IRQF_ONESHOT)) +		    (oldtype != (new->flags & IRQF_TRIGGER_MASK))) +			goto mismatch; + +		if ((old->flags & IRQF_ONESHOT) && +		    (new->flags & IRQF_COND_ONESHOT)) +			new->flags |= IRQF_ONESHOT; +		else if ((old->flags ^ new->flags) & IRQF_ONESHOT)  			goto mismatch;  		/* All handlers must agree on per-cpuness */  |