diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-02-04 04:17:52 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2011-02-19 06:58:11 -0500 |
commit | 3aae994fb0f43f6d94a31c33536a83869504abdf (patch) | |
tree | f928d2067cecfbb89c1133a8b513f84c890f7e9d /kernel | |
parent | 50f7c0327513d5acefbe26fd33498af18d1ffac5 (diff) |
genirq: Consolidate IRQ_DISABLED
Handle IRQ_DISABLED consistent.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/irq/chip.c | 14 | ||||
-rw-r--r-- | kernel/irq/manage.c | 9 | ||||
-rw-r--r-- | kernel/irq/resend.c | 5 | ||||
-rw-r--r-- | kernel/irq/spurious.c | 2 |
4 files changed, 14 insertions, 16 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 1a239a83f925..43c62ca68c11 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
@@ -194,11 +194,14 @@ EXPORT_SYMBOL_GPL(set_irq_nested_thread); | |||
194 | 194 | ||
195 | int irq_startup(struct irq_desc *desc) | 195 | int irq_startup(struct irq_desc *desc) |
196 | { | 196 | { |
197 | desc->status &= ~(IRQ_MASKED | IRQ_DISABLED); | 197 | desc->status &= ~IRQ_DISABLED; |
198 | desc->depth = 0; | 198 | desc->depth = 0; |
199 | 199 | ||
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 | int ret = desc->irq_data.chip->irq_startup(&desc->irq_data); |
202 | desc->status &= ~IRQ_MASKED; | ||
203 | return ret; | ||
204 | } | ||
202 | 205 | ||
203 | irq_enable(desc); | 206 | irq_enable(desc); |
204 | return 0; | 207 | return 0; |
@@ -206,7 +209,7 @@ int irq_startup(struct irq_desc *desc) | |||
206 | 209 | ||
207 | void irq_shutdown(struct irq_desc *desc) | 210 | void irq_shutdown(struct irq_desc *desc) |
208 | { | 211 | { |
209 | desc->status |= IRQ_MASKED | IRQ_DISABLED; | 212 | desc->status |= IRQ_DISABLED; |
210 | desc->depth = 1; | 213 | desc->depth = 1; |
211 | if (desc->irq_data.chip->irq_shutdown) | 214 | if (desc->irq_data.chip->irq_shutdown) |
212 | desc->irq_data.chip->irq_shutdown(&desc->irq_data); | 215 | desc->irq_data.chip->irq_shutdown(&desc->irq_data); |
@@ -214,10 +217,12 @@ void irq_shutdown(struct irq_desc *desc) | |||
214 | desc->irq_data.chip->irq_disable(&desc->irq_data); | 217 | desc->irq_data.chip->irq_disable(&desc->irq_data); |
215 | else | 218 | else |
216 | desc->irq_data.chip->irq_mask(&desc->irq_data); | 219 | desc->irq_data.chip->irq_mask(&desc->irq_data); |
220 | desc->status |= IRQ_MASKED; | ||
217 | } | 221 | } |
218 | 222 | ||
219 | void irq_enable(struct irq_desc *desc) | 223 | void irq_enable(struct irq_desc *desc) |
220 | { | 224 | { |
225 | desc->status &= ~IRQ_DISABLED; | ||
221 | if (desc->irq_data.chip->irq_enable) | 226 | if (desc->irq_data.chip->irq_enable) |
222 | desc->irq_data.chip->irq_enable(&desc->irq_data); | 227 | desc->irq_data.chip->irq_enable(&desc->irq_data); |
223 | else | 228 | else |
@@ -227,6 +232,7 @@ void irq_enable(struct irq_desc *desc) | |||
227 | 232 | ||
228 | void irq_disable(struct irq_desc *desc) | 233 | void irq_disable(struct irq_desc *desc) |
229 | { | 234 | { |
235 | desc->status |= IRQ_DISABLED; | ||
230 | if (desc->irq_data.chip->irq_disable) { | 236 | if (desc->irq_data.chip->irq_disable) { |
231 | desc->irq_data.chip->irq_disable(&desc->irq_data); | 237 | desc->irq_data.chip->irq_disable(&desc->irq_data); |
232 | desc->status |= IRQ_MASKED; | 238 | desc->status |= IRQ_MASKED; |
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 2a6c6ee11a3f..78a566a9b39f 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c | |||
@@ -329,10 +329,8 @@ void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend) | |||
329 | desc->status |= IRQ_SUSPENDED; | 329 | desc->status |= IRQ_SUSPENDED; |
330 | } | 330 | } |
331 | 331 | ||
332 | if (!desc->depth++) { | 332 | if (!desc->depth++) |
333 | desc->status |= IRQ_DISABLED; | ||
334 | irq_disable(desc); | 333 | irq_disable(desc); |
335 | } | ||
336 | } | 334 | } |
337 | 335 | ||
338 | /** | 336 | /** |
@@ -407,12 +405,11 @@ void __enable_irq(struct irq_desc *desc, unsigned int irq, bool resume) | |||
407 | WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n", irq); | 405 | WARN(1, KERN_WARNING "Unbalanced enable for IRQ %d\n", irq); |
408 | break; | 406 | break; |
409 | case 1: { | 407 | case 1: { |
410 | unsigned int status = desc->status & ~IRQ_DISABLED; | ||
411 | |||
412 | if (desc->status & IRQ_SUSPENDED) | 408 | if (desc->status & IRQ_SUSPENDED) |
413 | goto err_out; | 409 | goto err_out; |
414 | /* Prevent probing on this irq: */ | 410 | /* Prevent probing on this irq: */ |
415 | desc->status = status | IRQ_NOPROBE; | 411 | desc->status |= IRQ_NOPROBE; |
412 | irq_enable(desc); | ||
416 | check_irq_resend(desc, irq); | 413 | check_irq_resend(desc, irq); |
417 | /* fall-through */ | 414 | /* fall-through */ |
418 | } | 415 | } |
diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c index 4bfe268dffe5..60b20261041b 100644 --- a/kernel/irq/resend.c +++ b/kernel/irq/resend.c | |||
@@ -56,11 +56,6 @@ static DECLARE_TASKLET(resend_tasklet, resend_irqs, 0); | |||
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 | /* | 58 | /* |
59 | * Make sure the interrupt is enabled, before resending it: | ||
60 | */ | ||
61 | irq_enable(desc); | ||
62 | |||
63 | /* | ||
64 | * We do not resend level type interrupts. Level type | 59 | * We do not resend level type interrupts. Level type |
65 | * interrupts are resent by hardware when they are still | 60 | * interrupts are resent by hardware when they are still |
66 | * active. | 61 | * active. |
diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c index c300b8f6008d..89e5e16aca39 100644 --- a/kernel/irq/spurious.c +++ b/kernel/irq/spurious.c | |||
@@ -301,7 +301,7 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc, | |||
301 | * Now kill the IRQ | 301 | * Now kill the IRQ |
302 | */ | 302 | */ |
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_SPURIOUS_DISABLED; |
305 | desc->depth++; | 305 | desc->depth++; |
306 | irq_disable(desc); | 306 | irq_disable(desc); |
307 | 307 | ||