From ccbd6e18621ef73811f4f68fbd467cf53103dd0f Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Tue, 23 Mar 2010 22:40:53 +0100 Subject: [PATCH] --- yaml --- r: 189076 b: refs/heads/master c: cc8c3b78433222e5dbc1fdfcfdde29e1743f181a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/irq/manage.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) 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; }