On Wed, Mar 25, 2020 at 11:54:59AM +0800, Jiaxun Yang wrote: > The old code is using legacy domain to setup irq_domain for CPU interrupts > which requires irq_desc to be preallocated. > > However, when MIPS_CPU_IRQ_BASE >= 16, irq_desc for CPU IRQs may end up > unallocated and lead to incorrect behavior. > > Thus we convert the legacy domain to simple domain which can allocate > irq_desc during initialization. > > Signed-off-by: Jiaxun Yang <jiaxun.yang@xxxxxxxxxxx> > Co-developed-by: Huacai Chen <chenhc@xxxxxxxxxx> > Signed-off-by: Huacai Chen <chenhc@xxxxxxxxxx> > Reviewed-by: Marc Zyngier <maz@xxxxxxxxxx> > --- > drivers/irqchip/irq-mips-cpu.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/irqchip/irq-mips-cpu.c b/drivers/irqchip/irq-mips-cpu.c > index 95d4fd8f7a96..c3cf7fa76424 100644 > --- a/drivers/irqchip/irq-mips-cpu.c > +++ b/drivers/irqchip/irq-mips-cpu.c > @@ -251,7 +251,7 @@ static void __init __mips_cpu_irq_init(struct device_node *of_node) > clear_c0_status(ST0_IM); > clear_c0_cause(CAUSEF_IP); > > - irq_domain = irq_domain_add_legacy(of_node, 8, MIPS_CPU_IRQ_BASE, 0, > + irq_domain = irq_domain_add_simple(of_node, 8, MIPS_CPU_IRQ_BASE, > &mips_cpu_intc_irq_domain_ops, > NULL); this breaks at least IP30 and guess it will break every platform where MIPS_CPU_IRQ_BASE == 0. add_legacy will always do irq_domain_associate_many(), while add_simple doesn't do it, if first_irq == 0. Marc, what is the reason not doing it all the time ? What's the correct way here to work with irq_domain_add_simple() in this case ? Thomas. -- Crap can work. Given enough thrust pigs will fly, but it's not necessarily a good idea. [ RFC1925, 2.3 ]