diff options
Diffstat (limited to 'kernel/irq/irqdesc.c')
| -rw-r--r-- | kernel/irq/irqdesc.c | 11 | 
1 files changed, 10 insertions, 1 deletions
diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c index 282f20230e6..2039bea31bd 100644 --- a/kernel/irq/irqdesc.c +++ b/kernel/irq/irqdesc.c @@ -94,7 +94,7 @@ int nr_irqs = NR_IRQS;  EXPORT_SYMBOL_GPL(nr_irqs);  static DEFINE_MUTEX(sparse_irq_lock); -static DECLARE_BITMAP(allocated_irqs, NR_IRQS); +static DECLARE_BITMAP(allocated_irqs, IRQ_BITMAP_BITS);  #ifdef CONFIG_SPARSE_IRQ @@ -217,6 +217,15 @@ int __init early_irq_init(void)  	initcnt = arch_probe_nr_irqs();  	printk(KERN_INFO "NR_IRQS:%d nr_irqs:%d %d\n", NR_IRQS, nr_irqs, initcnt); +	if (WARN_ON(nr_irqs > IRQ_BITMAP_BITS)) +		nr_irqs = IRQ_BITMAP_BITS; + +	if (WARN_ON(initcnt > IRQ_BITMAP_BITS)) +		initcnt = IRQ_BITMAP_BITS; + +	if (initcnt > nr_irqs) +		nr_irqs = initcnt; +  	for (i = 0; i < initcnt; i++) {  		desc = alloc_desc(i, node);  		set_bit(i, allocated_irqs);  |