Message ID | 20210222201332.30253-1-noltari@gmail.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | irqchip/bcm-6345-l1: fix SMP support | expand |
On 2/22/2021 12:13 PM, Álvaro Fernández Rojas wrote: > Some BCM6358 devices start with Core #1 instead of Core #0. > Apart from that, SMP is restricted to 1 CPU since BCM6358 has a shared TLB, > which makes it impossible for the current SMP support to start both CPUs. > > The problem is that smp_processor_id() returns 0 and then cpu_logical_map() > converts that to 1, which accesses an uninitialized position of intc->cpus[], > resulting in a kernel panic. Sounds like you nee to correct the way the cpu_logical_map[] is populated then?
Hi Florian, Yes, you’re right, there seems to be a bug, because cpu_number_map() and cpu_logical_map() are returning the same when BCM6358 starts with CMT 1: [ 4.662896] bcm6345_l1_irq_handle: smp_id=0 cpu_logical=1 cpu_number=1 Let’s see if I can fix it… Best regards, Álvaro. > El 22 feb 2021, a las 22:00, Florian Fainelli <f.fainelli@gmail.com> escribió: > > > > On 2/22/2021 12:13 PM, Álvaro Fernández Rojas wrote: >> Some BCM6358 devices start with Core #1 instead of Core #0. >> Apart from that, SMP is restricted to 1 CPU since BCM6358 has a shared TLB, >> which makes it impossible for the current SMP support to start both CPUs. >> >> The problem is that smp_processor_id() returns 0 and then cpu_logical_map() >> converts that to 1, which accesses an uninitialized position of intc->cpus[], >> resulting in a kernel panic. > > Sounds like you nee to correct the way the cpu_logical_map[] is > populated then? > -- > Florian
diff --git a/drivers/irqchip/irq-bcm6345-l1.c b/drivers/irqchip/irq-bcm6345-l1.c index e3483789f4df..b2173ce4743d 100644 --- a/drivers/irqchip/irq-bcm6345-l1.c +++ b/drivers/irqchip/irq-bcm6345-l1.c @@ -121,7 +121,7 @@ static void bcm6345_l1_irq_handle(struct irq_desc *desc) unsigned int idx; #ifdef CONFIG_SMP - cpu = intc->cpus[cpu_logical_map(smp_processor_id())]; + cpu = intc->cpus[smp_processor_id()]; #else cpu = intc->cpus[0]; #endif
Some BCM6358 devices start with Core #1 instead of Core #0. Apart from that, SMP is restricted to 1 CPU since BCM6358 has a shared TLB, which makes it impossible for the current SMP support to start both CPUs. The problem is that smp_processor_id() returns 0 and then cpu_logical_map() converts that to 1, which accesses an uninitialized position of intc->cpus[], resulting in a kernel panic. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> --- drivers/irqchip/irq-bcm6345-l1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)