diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-07 22:21:11 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-07 22:21:11 -0400 |
commit | cb0a02ecf95e5f47d92e7d4c513cc1f7aeb40cda (patch) | |
tree | 3e9b2341855a1b5ddac5f0edb74a679111f8a350 /kernel/irq/irqdesc.c | |
parent | d681f1204d701cafbc45fa90e0ac977acddc33cc (diff) | |
parent | c5182b8867e189e14a8df5dbfcba1c73f286e061 (diff) |
Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
genirq: Ensure we locate the passed IRQ in irq_alloc_descs()
genirq: Fix descriptor init on non-sparse IRQs
irq: Handle spurios irq detection for threaded irqs
genirq: Print threaded handler in spurious debug output
Diffstat (limited to 'kernel/irq/irqdesc.c')
-rw-r--r-- | kernel/irq/irqdesc.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c index 886e80347b32..4c60a50e66b2 100644 --- a/kernel/irq/irqdesc.c +++ b/kernel/irq/irqdesc.c | |||
@@ -257,13 +257,11 @@ int __init early_irq_init(void) | |||
257 | count = ARRAY_SIZE(irq_desc); | 257 | count = ARRAY_SIZE(irq_desc); |
258 | 258 | ||
259 | for (i = 0; i < count; i++) { | 259 | for (i = 0; i < count; i++) { |
260 | desc[i].irq_data.irq = i; | ||
261 | desc[i].irq_data.chip = &no_irq_chip; | ||
262 | desc[i].kstat_irqs = alloc_percpu(unsigned int); | 260 | desc[i].kstat_irqs = alloc_percpu(unsigned int); |
263 | irq_settings_clr_and_set(desc, ~0, _IRQ_DEFAULT_INIT_FLAGS); | 261 | alloc_masks(&desc[i], GFP_KERNEL, node); |
264 | alloc_masks(desc + i, GFP_KERNEL, node); | 262 | raw_spin_lock_init(&desc[i].lock); |
265 | desc_smp_init(desc + i, node); | ||
266 | lockdep_set_class(&desc[i].lock, &irq_desc_lock_class); | 263 | lockdep_set_class(&desc[i].lock, &irq_desc_lock_class); |
264 | desc_set_defaults(i, &desc[i], node); | ||
267 | } | 265 | } |
268 | return arch_early_irq_init(); | 266 | return arch_early_irq_init(); |
269 | } | 267 | } |
@@ -346,6 +344,12 @@ irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node) | |||
346 | if (!cnt) | 344 | if (!cnt) |
347 | return -EINVAL; | 345 | return -EINVAL; |
348 | 346 | ||
347 | if (irq >= 0) { | ||
348 | if (from > irq) | ||
349 | return -EINVAL; | ||
350 | from = irq; | ||
351 | } | ||
352 | |||
349 | mutex_lock(&sparse_irq_lock); | 353 | mutex_lock(&sparse_irq_lock); |
350 | 354 | ||
351 | start = bitmap_find_next_zero_area(allocated_irqs, IRQ_BITMAP_BITS, | 355 | start = bitmap_find_next_zero_area(allocated_irqs, IRQ_BITMAP_BITS, |