diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-02-02 16:41:14 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2011-02-19 06:58:10 -0500 |
commit | 4699923861513671d3f6ade8efb4e56a9a7ecadf (patch) | |
tree | 862cda99b9af6fe96fda955107f24a7b5cc97a18 /kernel/irq/manage.c | |
parent | 3b56f0585fd4c02d047dc406668cb40159b2d340 (diff) |
genirq: Consolidate startup/shutdown of interrupts
Aside of duplicated code some of the startup/shutdown sites do not
handle the MASKED/DISABLED flags and the depth field at all. Move that
to a helper function and take care of it there.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <20110202212551.787481468@linutronix.de>
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r-- | kernel/irq/manage.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 30bc8de40905..9c562477e28b 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c | |||
@@ -906,11 +906,9 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) | |||
906 | if (new->flags & IRQF_ONESHOT) | 906 | if (new->flags & IRQF_ONESHOT) |
907 | desc->status |= IRQ_ONESHOT; | 907 | desc->status |= IRQ_ONESHOT; |
908 | 908 | ||
909 | if (!(desc->status & IRQ_NOAUTOEN)) { | 909 | if (!(desc->status & IRQ_NOAUTOEN)) |
910 | desc->depth = 0; | 910 | irq_startup(desc); |
911 | desc->status &= ~IRQ_DISABLED; | 911 | else |
912 | desc->irq_data.chip->irq_startup(&desc->irq_data); | ||
913 | } else | ||
914 | /* Undo nested disables: */ | 912 | /* Undo nested disables: */ |
915 | desc->depth = 1; | 913 | desc->depth = 1; |
916 | 914 | ||
@@ -1055,10 +1053,8 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id) | |||
1055 | #endif | 1053 | #endif |
1056 | 1054 | ||
1057 | /* If this was the last handler, shut down the IRQ line: */ | 1055 | /* If this was the last handler, shut down the IRQ line: */ |
1058 | if (!desc->action) { | 1056 | if (!desc->action) |
1059 | desc->status |= IRQ_DISABLED; | 1057 | irq_shutdown(desc); |
1060 | desc->irq_data.chip->irq_shutdown(&desc->irq_data); | ||
1061 | } | ||
1062 | 1058 | ||
1063 | #ifdef CONFIG_SMP | 1059 | #ifdef CONFIG_SMP |
1064 | /* make sure affinity_hint is cleaned up */ | 1060 | /* make sure affinity_hint is cleaned up */ |