Skip to content

Commit

Permalink
irq: further clean up the free_irq() code flow
Browse files Browse the repository at this point in the history
Linus noticed that the 'pp' variable can be eliminated
altogether, and the loop can be cleaned up further.

Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Ingo Molnar committed Feb 17, 2009
1 parent ae88a23 commit 8316e38
Showing 1 changed file with 4 additions and 7 deletions.
11 changes: 4 additions & 7 deletions kernel/irq/manage.c
Original file line number Diff line number Diff line change
Expand Up @@ -575,7 +575,7 @@ int setup_irq(unsigned int irq, struct irqaction *act)
void free_irq(unsigned int irq, void *dev_id)
{
struct irq_desc *desc = irq_to_desc(irq);
struct irqaction *action, **p, **pp;
struct irqaction *action, **p;
unsigned long flags;

WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq);
Expand All @@ -592,7 +592,6 @@ void free_irq(unsigned int irq, void *dev_id)
p = &desc->action;
for (;;) {
action = *p;
pp = p;

if (!action) {
WARN(1, "Trying to free already-free IRQ %d\n", irq);
Expand All @@ -601,15 +600,13 @@ void free_irq(unsigned int irq, void *dev_id)
return;
}

if (action->dev_id == dev_id)
break;
p = &action->next;
if (action->dev_id != dev_id)
continue;

break;
}

/* Found it - now remove it from the list of entries: */
*pp = action->next;
*p = action->next;

/* Currently used only by UML, might disappear one day: */
#ifdef CONFIG_IRQ_RELEASE_METHOD
Expand Down

0 comments on commit 8316e38

Please sign in to comment.