Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b683de2b authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

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: default avatarThomas Gleixner <tglx@linutronix.de>
Reviewed-by: default avatarIngo Molnar <mingo@elte.hu>
parent aa99ec0f
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -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

+1 −1
Original line number Diff line number Diff line
@@ -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

+1 −1
Original line number Diff line number Diff line
@@ -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

+4 −0
Original line number Diff line number Diff line
@@ -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
+5 −5
Original line number Diff line number Diff line
@@ -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);
Loading