@@ -131,7 +131,18 @@ int nr_irqs = NR_IRQS;
131
131
EXPORT_SYMBOL_GPL (nr_irqs );
132
132
133
133
static DEFINE_MUTEX (sparse_irq_lock );
134
- static DECLARE_BITMAP (allocated_irqs , IRQ_BITMAP_BITS ) ;
134
+ static DECLARE_BITMAP (allocated_irqs , MAX_SPARSE_IRQS ) ;
135
+
136
+ static int irq_find_free_area (unsigned int from , unsigned int cnt )
137
+ {
138
+ return bitmap_find_next_zero_area (allocated_irqs , MAX_SPARSE_IRQS ,
139
+ from , cnt , 0 );
140
+ }
141
+
142
+ static unsigned int irq_find_at_or_after (unsigned int offset )
143
+ {
144
+ return find_next_bit (allocated_irqs , nr_irqs , offset );
145
+ }
135
146
136
147
#ifdef CONFIG_SPARSE_IRQ
137
148
@@ -517,7 +528,7 @@ static int alloc_descs(unsigned int start, unsigned int cnt, int node,
517
528
518
529
static int irq_expand_nr_irqs (unsigned int nr )
519
530
{
520
- if (nr > IRQ_BITMAP_BITS )
531
+ if (nr > MAX_SPARSE_IRQS )
521
532
return - ENOMEM ;
522
533
nr_irqs = nr ;
523
534
return 0 ;
@@ -535,11 +546,11 @@ int __init early_irq_init(void)
535
546
printk (KERN_INFO "NR_IRQS: %d, nr_irqs: %d, preallocated irqs: %d\n" ,
536
547
NR_IRQS , nr_irqs , initcnt );
537
548
538
- if (WARN_ON (nr_irqs > IRQ_BITMAP_BITS ))
539
- nr_irqs = IRQ_BITMAP_BITS ;
549
+ if (WARN_ON (nr_irqs > MAX_SPARSE_IRQS ))
550
+ nr_irqs = MAX_SPARSE_IRQS ;
540
551
541
- if (WARN_ON (initcnt > IRQ_BITMAP_BITS ))
542
- initcnt = IRQ_BITMAP_BITS ;
552
+ if (WARN_ON (initcnt > MAX_SPARSE_IRQS ))
553
+ initcnt = MAX_SPARSE_IRQS ;
543
554
544
555
if (initcnt > nr_irqs )
545
556
nr_irqs = initcnt ;
@@ -812,8 +823,7 @@ __irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node,
812
823
813
824
mutex_lock (& sparse_irq_lock );
814
825
815
- start = bitmap_find_next_zero_area (allocated_irqs , IRQ_BITMAP_BITS ,
816
- from , cnt , 0 );
826
+ start = irq_find_free_area (from , cnt );
817
827
ret = - EEXIST ;
818
828
if (irq >=0 && start != irq )
819
829
goto unlock ;
@@ -834,11 +844,11 @@ EXPORT_SYMBOL_GPL(__irq_alloc_descs);
834
844
* irq_get_next_irq - get next allocated irq number
835
845
* @offset: where to start the search
836
846
*
837
- * Returns next irq number after offset or nr_irqs if none is found.
847
+ * Returns next irq number at or after offset or nr_irqs if none is found.
838
848
*/
839
849
unsigned int irq_get_next_irq (unsigned int offset )
840
850
{
841
- return find_next_bit ( allocated_irqs , nr_irqs , offset );
851
+ return irq_find_at_or_after ( offset );
842
852
}
843
853
844
854
struct irq_desc *
0 commit comments