mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 12:39:23 +00:00 
			
		
		
		
	genirq: Query arch for number of early descriptors
sparse irq sets up NR_IRQS_LEGACY irq descriptors and archs then go ahead and allocate more. Use the unused return value of arch_probe_nr_irqs() to let the architecture return the number of early allocations. Fix up all users. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
		
							parent
							
								
									aa99ec0f3f
								
							
						
					
					
						commit
						b683de2b3c
					
				| @ -157,10 +157,8 @@ void __init init_IRQ(void) | ||||
| 	struct irq_desc *desc; | ||||
| 	int irq; | ||||
| 
 | ||||
| 	for (irq = 0; irq < nr_irqs; irq++) { | ||||
| 		desc = irq_to_desc_alloc_node(irq, 0); | ||||
| 	for (irq = 0; irq < nr_irqs; irq++) | ||||
| 		desc->status |= IRQ_NOREQUEST | IRQ_NOPROBE; | ||||
| 	} | ||||
| 
 | ||||
| 	init_arch_irq(); | ||||
| } | ||||
| @ -169,7 +167,7 @@ void __init init_IRQ(void) | ||||
| int __init arch_probe_nr_irqs(void) | ||||
| { | ||||
| 	nr_irqs = arch_nr_irqs ? arch_nr_irqs : NR_IRQS; | ||||
| 	return 0; | ||||
| 	return nr_irqs; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -290,7 +290,7 @@ void __init init_IRQ(void) | ||||
| int __init arch_probe_nr_irqs(void) | ||||
| { | ||||
| 	nr_irqs = sh_mv.mv_nr_irqs; | ||||
| 	return 0; | ||||
| 	return NR_IRQS_LEGACY; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -3880,7 +3880,7 @@ int __init arch_probe_nr_irqs(void) | ||||
| 	if (nr < nr_irqs) | ||||
| 		nr_irqs = nr; | ||||
| 
 | ||||
| 	return 0; | ||||
| 	return NR_IRQS_LEGACY; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -214,6 +214,10 @@ struct irq_chip { | ||||
|  */ | ||||
| #include <asm/hw_irq.h> | ||||
| 
 | ||||
| #ifndef NR_IRQS_LEGACY | ||||
| # define NR_IRQS_LEGACY 0 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ARCH_IRQ_INIT_FLAGS | ||||
| # define ARCH_IRQ_INIT_FLAGS	0 | ||||
| #endif | ||||
|  | ||||
| @ -226,16 +226,16 @@ struct irq_desc * __ref irq_to_desc_alloc_node(unsigned int irq, int node) | ||||
| 
 | ||||
| int __init early_irq_init(void) | ||||
| { | ||||
| 	int i, node = first_online_node; | ||||
| 	int i, initcnt, node = first_online_node; | ||||
| 	struct irq_desc *desc; | ||||
| 
 | ||||
| 	init_irq_default_affinity(); | ||||
| 
 | ||||
| 	 /* initialize nr_irqs based on nr_cpu_ids */ | ||||
| 	arch_probe_nr_irqs(); | ||||
| 	printk(KERN_INFO "NR_IRQS:%d nr_irqs:%d\n", NR_IRQS, nr_irqs); | ||||
| 	/* Let arch update nr_irqs and return the nr of preallocated irqs */ | ||||
| 	initcnt = arch_probe_nr_irqs(); | ||||
| 	printk(KERN_INFO "NR_IRQS:%d nr_irqs:%d %d\n", NR_IRQS, nr_irqs, initcnt); | ||||
| 
 | ||||
| 	for (i = 0; i < NR_IRQS_LEGACY; i++) { | ||||
| 	for (i = 0; i < initcnt; i++) { | ||||
| 		desc = alloc_desc(i, node); | ||||
| 		set_bit(i, allocated_irqs); | ||||
| 		irq_insert_desc(i, desc); | ||||
|  | ||||
| @ -886,9 +886,10 @@ int __init __weak early_irq_init(void) | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_GENERIC_HARDIRQS | ||||
| int __init __weak arch_probe_nr_irqs(void) | ||||
| { | ||||
| 	return 0; | ||||
| 	return NR_IRQS_LEGACY; | ||||
| } | ||||
| 
 | ||||
| int __init __weak arch_early_irq_init(void) | ||||
| @ -900,3 +901,4 @@ int __weak arch_init_chip_data(struct irq_desc *desc, int node) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| #endif | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Thomas Gleixner
						Thomas Gleixner