diff options
author | Ahmed S. Darwish <darwish.07@gmail.com> | 2007-05-08 00:27:55 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-08 11:15:06 -0700 |
commit | f75d222b836f7febfab0954c7612b23059d748cb (patch) | |
tree | 229ff362a000daca8aa4c45c3c7216efdb4bfb94 /kernel | |
parent | 3367b994fe4f131ab1240600682a1981de7cad0c (diff) | |
download | kernel_goldelico_gta04-f75d222b836f7febfab0954c7612b23059d748cb.zip kernel_goldelico_gta04-f75d222b836f7febfab0954c7612b23059d748cb.tar.gz kernel_goldelico_gta04-f75d222b836f7febfab0954c7612b23059d748cb.tar.bz2 |
IRQ: check for PERCPU flag only when adding first irqaction
An irqaction structure won't be added to an IRQ descriptor irqaction list if
it doesn't agree with other irqactions on the IRQF_PERCPU flag. Don't check
for this flag to change IRQ descriptor `status' for every irqaction added to
the list, Doing the check only for the first irqaction added is enough.
Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/irq/manage.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 5597c15..203a518 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -317,10 +317,7 @@ int setup_irq(unsigned int irq, struct irqaction *new) } *p = new; -#if defined(CONFIG_IRQ_PER_CPU) - if (new->flags & IRQF_PERCPU) - desc->status |= IRQ_PER_CPU; -#endif + /* Exclude IRQ from balancing */ if (new->flags & IRQF_NOBALANCING) desc->status |= IRQ_NO_BALANCING; @@ -328,6 +325,11 @@ int setup_irq(unsigned int irq, struct irqaction *new) if (!shared) { irq_chip_set_defaults(desc->chip); +#if defined(CONFIG_IRQ_PER_CPU) + if (new->flags & IRQF_PERCPU) + desc->status |= IRQ_PER_CPU; +#endif + /* Setup the type (level, edge polarity) if configured: */ if (new->flags & IRQF_TRIGGER_MASK) { if (desc->chip && desc->chip->set_type) |