于 2020年3月25日 GMT+08:00 下午8:37:42, Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx> 写到: >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 ? I guess there is a inconsistent about whether IRQ 0 is a valid IRQ. In many places we consider IRQ 0 is invalid but here it should be valid. Thanks. > >Thomas. -- Jiaxun Yang