diff options
Diffstat (limited to 'kernel/irq/autoprobe.c')
| -rw-r--r-- | kernel/irq/autoprobe.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/kernel/irq/autoprobe.c b/kernel/irq/autoprobe.c index cc0f7321b8ce..650ce4102a63 100644 --- a/kernel/irq/autoprobe.c +++ b/kernel/irq/autoprobe.c | |||
| @@ -40,6 +40,9 @@ unsigned long probe_irq_on(void) | |||
| 40 | * flush such a longstanding irq before considering it as spurious. | 40 | * flush such a longstanding irq before considering it as spurious. |
| 41 | */ | 41 | */ |
| 42 | for_each_irq_desc_reverse(i, desc) { | 42 | for_each_irq_desc_reverse(i, desc) { |
| 43 | if (!desc) | ||
| 44 | continue; | ||
| 45 | |||
| 43 | spin_lock_irq(&desc->lock); | 46 | spin_lock_irq(&desc->lock); |
| 44 | if (!desc->action && !(desc->status & IRQ_NOPROBE)) { | 47 | if (!desc->action && !(desc->status & IRQ_NOPROBE)) { |
| 45 | /* | 48 | /* |
| @@ -68,6 +71,9 @@ unsigned long probe_irq_on(void) | |||
| 68 | * happened in the previous stage, it may have masked itself) | 71 | * happened in the previous stage, it may have masked itself) |
| 69 | */ | 72 | */ |
| 70 | for_each_irq_desc_reverse(i, desc) { | 73 | for_each_irq_desc_reverse(i, desc) { |
| 74 | if (!desc) | ||
| 75 | continue; | ||
| 76 | |||
| 71 | spin_lock_irq(&desc->lock); | 77 | spin_lock_irq(&desc->lock); |
| 72 | if (!desc->action && !(desc->status & IRQ_NOPROBE)) { | 78 | if (!desc->action && !(desc->status & IRQ_NOPROBE)) { |
| 73 | desc->status |= IRQ_AUTODETECT | IRQ_WAITING; | 79 | desc->status |= IRQ_AUTODETECT | IRQ_WAITING; |
| @@ -86,6 +92,9 @@ unsigned long probe_irq_on(void) | |||
| 86 | * Now filter out any obviously spurious interrupts | 92 | * Now filter out any obviously spurious interrupts |
| 87 | */ | 93 | */ |
| 88 | for_each_irq_desc(i, desc) { | 94 | for_each_irq_desc(i, desc) { |
| 95 | if (!desc) | ||
| 96 | continue; | ||
| 97 | |||
| 89 | spin_lock_irq(&desc->lock); | 98 | spin_lock_irq(&desc->lock); |
| 90 | status = desc->status; | 99 | status = desc->status; |
| 91 | 100 | ||
| @@ -124,6 +133,9 @@ unsigned int probe_irq_mask(unsigned long val) | |||
| 124 | int i; | 133 | int i; |
| 125 | 134 | ||
| 126 | for_each_irq_desc(i, desc) { | 135 | for_each_irq_desc(i, desc) { |
| 136 | if (!desc) | ||
| 137 | continue; | ||
| 138 | |||
| 127 | spin_lock_irq(&desc->lock); | 139 | spin_lock_irq(&desc->lock); |
| 128 | status = desc->status; | 140 | status = desc->status; |
| 129 | 141 | ||
| @@ -166,6 +178,9 @@ int probe_irq_off(unsigned long val) | |||
| 166 | unsigned int status; | 178 | unsigned int status; |
| 167 | 179 | ||
| 168 | for_each_irq_desc(i, desc) { | 180 | for_each_irq_desc(i, desc) { |
| 181 | if (!desc) | ||
| 182 | continue; | ||
| 183 | |||
| 169 | spin_lock_irq(&desc->lock); | 184 | spin_lock_irq(&desc->lock); |
| 170 | status = desc->status; | 185 | status = desc->status; |
| 171 | 186 | ||
