@@ -131,7 +131,18 @@ int nr_irqs = NR_IRQS;
131131EXPORT_SYMBOL_GPL (nr_irqs );
132132
133133static 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+ }
135146
136147#ifdef CONFIG_SPARSE_IRQ
137148
@@ -517,7 +528,7 @@ static int alloc_descs(unsigned int start, unsigned int cnt, int node,
517528
518529static int irq_expand_nr_irqs (unsigned int nr )
519530{
520- if (nr > IRQ_BITMAP_BITS )
531+ if (nr > MAX_SPARSE_IRQS )
521532 return - ENOMEM ;
522533 nr_irqs = nr ;
523534 return 0 ;
@@ -535,11 +546,11 @@ int __init early_irq_init(void)
535546 printk (KERN_INFO "NR_IRQS: %d, nr_irqs: %d, preallocated irqs: %d\n" ,
536547 NR_IRQS , nr_irqs , initcnt );
537548
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 ;
540551
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 ;
543554
544555 if (initcnt > nr_irqs )
545556 nr_irqs = initcnt ;
@@ -812,8 +823,7 @@ __irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node,
812823
813824 mutex_lock (& sparse_irq_lock );
814825
815- start = bitmap_find_next_zero_area (allocated_irqs , IRQ_BITMAP_BITS ,
816- from , cnt , 0 );
826+ start = irq_find_free_area (from , cnt );
817827 ret = - EEXIST ;
818828 if (irq >=0 && start != irq )
819829 goto unlock ;
@@ -834,11 +844,11 @@ EXPORT_SYMBOL_GPL(__irq_alloc_descs);
834844 * irq_get_next_irq - get next allocated irq number
835845 * @offset: where to start the search
836846 *
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.
838848 */
839849unsigned int irq_get_next_irq (unsigned int offset )
840850{
841- return find_next_bit ( allocated_irqs , nr_irqs , offset );
851+ return irq_find_at_or_after ( offset );
842852}
843853
844854struct irq_desc *
0 commit comments