diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-02-03 06:27:44 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2011-02-19 06:58:10 -0500 |
commit | 87923470c712dff00b101ffb6b6fbc27bd7a6df5 (patch) | |
tree | 35dc1a0adec4d00bbc872ce096c481cf0d69314a /kernel | |
parent | 4699923861513671d3f6ade8efb4e56a9a7ecadf (diff) |
genirq: Consolidate disable/enable
Create irq_disable/enable and use them to keep the flags consistent.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/irq/chip.c | 12 | ||||
-rw-r--r-- | kernel/irq/internals.h | 2 | ||||
-rw-r--r-- | kernel/irq/manage.c | 2 | ||||
-rw-r--r-- | kernel/irq/resend.c | 10 | ||||
-rw-r--r-- | kernel/irq/spurious.c | 2 |
5 files changed, 20 insertions, 8 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 988fe7a24282..86c8e42f7fe4 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
@@ -200,7 +200,7 @@ int irq_startup(struct irq_desc *desc) | |||
200 | if (desc->irq_data.chip->irq_startup) | 200 | if (desc->irq_data.chip->irq_startup) |
201 | return desc->irq_data.chip->irq_startup(&desc->irq_data); | 201 | return desc->irq_data.chip->irq_startup(&desc->irq_data); |
202 | 202 | ||
203 | desc->irq_data.chip->irq_enable(&desc->irq_data); | 203 | irq_enable(desc); |
204 | return 0; | 204 | return 0; |
205 | } | 205 | } |
206 | 206 | ||
@@ -211,6 +211,16 @@ void irq_shutdown(struct irq_desc *desc) | |||
211 | desc->irq_data.chip->irq_shutdown(&desc->irq_data); | 211 | desc->irq_data.chip->irq_shutdown(&desc->irq_data); |
212 | } | 212 | } |
213 | 213 | ||
214 | void irq_enable(struct irq_desc *desc) | ||
215 | { | ||
216 | desc->irq_data.chip->irq_enable(&desc->irq_data); | ||
217 | } | ||
218 | |||
219 | void irq_disable(struct irq_desc *desc) | ||
220 | { | ||
221 | desc->irq_data.chip->irq_disable(&desc->irq_data); | ||
222 | } | ||
223 | |||
214 | /* | 224 | /* |
215 | * default enable function | 225 | * default enable function |
216 | */ | 226 | */ |
diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h index 5cbfc93ed7b1..c71fc4de0371 100644 --- a/kernel/irq/internals.h +++ b/kernel/irq/internals.h | |||
@@ -40,6 +40,8 @@ extern void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume); | |||
40 | 40 | ||
41 | extern int irq_startup(struct irq_desc *desc); | 41 | extern int irq_startup(struct irq_desc *desc); |
42 | extern void irq_shutdown(struct irq_desc *desc); | 42 | extern void irq_shutdown(struct irq_desc *desc); |
43 | extern void irq_enable(struct irq_desc *desc); | ||
44 | extern void irq_disable(struct irq_desc *desc); | ||
43 | 45 | ||
44 | extern void init_kstat_irqs(struct irq_desc *desc, int node, int nr); | 46 | extern void init_kstat_irqs(struct irq_desc *desc, int node, int nr); |
45 | 47 | ||
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 9c562477e28b..007802399697 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c | |||
@@ -331,7 +331,7 @@ void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend) | |||
331 | 331 | ||
332 | if (!desc->depth++) { | 332 | if (!desc->depth++) { |
333 | desc->status |= IRQ_DISABLED; | 333 | desc->status |= IRQ_DISABLED; |
334 | desc->irq_data.chip->irq_disable(&desc->irq_data); | 334 | irq_disable(desc); |
335 | } | 335 | } |
336 | } | 336 | } |
337 | 337 | ||
diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c index dc49358b73fa..4bfe268dffe5 100644 --- a/kernel/irq/resend.c +++ b/kernel/irq/resend.c | |||
@@ -55,20 +55,20 @@ static DECLARE_TASKLET(resend_tasklet, resend_irqs, 0); | |||
55 | */ | 55 | */ |
56 | void check_irq_resend(struct irq_desc *desc, unsigned int irq) | 56 | void check_irq_resend(struct irq_desc *desc, unsigned int irq) |
57 | { | 57 | { |
58 | unsigned int status = desc->status; | ||
59 | |||
60 | /* | 58 | /* |
61 | * Make sure the interrupt is enabled, before resending it: | 59 | * Make sure the interrupt is enabled, before resending it: |
62 | */ | 60 | */ |
63 | desc->irq_data.chip->irq_enable(&desc->irq_data); | 61 | irq_enable(desc); |
64 | 62 | ||
65 | /* | 63 | /* |
66 | * We do not resend level type interrupts. Level type | 64 | * We do not resend level type interrupts. Level type |
67 | * interrupts are resent by hardware when they are still | 65 | * interrupts are resent by hardware when they are still |
68 | * active. | 66 | * active. |
69 | */ | 67 | */ |
70 | if ((status & (IRQ_LEVEL | IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) { | 68 | if (desc->status & IRQ_LEVEL) |
71 | desc->status = (status & ~IRQ_PENDING) | IRQ_REPLAY; | 69 | return; |
70 | if ((desc->status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) { | ||
71 | desc->status = (desc->status & ~IRQ_PENDING) | IRQ_REPLAY; | ||
72 | 72 | ||
73 | if (!desc->irq_data.chip->irq_retrigger || | 73 | if (!desc->irq_data.chip->irq_retrigger || |
74 | !desc->irq_data.chip->irq_retrigger(&desc->irq_data)) { | 74 | !desc->irq_data.chip->irq_retrigger(&desc->irq_data)) { |
diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c index f749d29bfd81..c300b8f6008d 100644 --- a/kernel/irq/spurious.c +++ b/kernel/irq/spurious.c | |||
@@ -303,7 +303,7 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc, | |||
303 | printk(KERN_EMERG "Disabling IRQ #%d\n", irq); | 303 | printk(KERN_EMERG "Disabling IRQ #%d\n", irq); |
304 | desc->status |= IRQ_DISABLED | IRQ_SPURIOUS_DISABLED; | 304 | desc->status |= IRQ_DISABLED | IRQ_SPURIOUS_DISABLED; |
305 | desc->depth++; | 305 | desc->depth++; |
306 | desc->irq_data.chip->irq_disable(&desc->irq_data); | 306 | irq_disable(desc); |
307 | 307 | ||
308 | mod_timer(&poll_spurious_irq_timer, | 308 | mod_timer(&poll_spurious_irq_timer, |
309 | jiffies + POLL_SPURIOUS_IRQ_INTERVAL); | 309 | jiffies + POLL_SPURIOUS_IRQ_INTERVAL); |