diff --git a/[refs] b/[refs] index 22ebce24c8fe..e2584abd3fcc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0b1adaa031a55e44f5dd942f234bf09d28e8a0d6 +refs/heads/master: cc8c3b78433222e5dbc1fdfcfdde29e1743f181a diff --git a/trunk/kernel/irq/manage.c b/trunk/kernel/irq/manage.c index 69a3d7b9414c..398fda155f6e 100644 --- a/trunk/kernel/irq/manage.c +++ b/trunk/kernel/irq/manage.c @@ -382,6 +382,7 @@ int can_request_irq(unsigned int irq, unsigned long irqflags) { struct irq_desc *desc = irq_to_desc(irq); struct irqaction *action; + unsigned long flags; if (!desc) return 0; @@ -389,11 +390,14 @@ int can_request_irq(unsigned int irq, unsigned long irqflags) if (desc->status & IRQ_NOREQUEST) return 0; + raw_spin_lock_irqsave(&desc->lock, flags); action = desc->action; if (action) if (irqflags & action->flags & IRQF_SHARED) action = NULL; + raw_spin_unlock_irqrestore(&desc->lock, flags); + return !action; }