Messages in this thread | | | From | Thomas Gleixner <> | Subject | Re: [PATCH v12 14/25] irqchip/sifive-plic: Convert PLIC driver into a platform driver | Date | Fri, 16 Feb 2024 21:22:13 +0100 |
| |
On Fri, Feb 16 2024 at 22:41, Anup Patel wrote: > On Fri, Feb 16, 2024 at 9:03 PM Thomas Gleixner <tglx@linutronix.de> wrote: >> I don't think that removing the setup protection is correct. >> >> Assume you have maxcpus=N on the kernel command line, then the above >> for_each_online_cpu() loop would result in cpuhp_setup == true when the >> instances for the not onlined CPUs are set up, no? > > A platform can have multiple PLIC instances where each PLIC > instance targets a subset of HARTs (or CPUs). > > Previously (before this patch), we were probing PLIC very early so on > a platform with multiple PLIC instances, we need to ensure that cpuhp > setup is done only after PLIC context associated with boot CPU is > initialized hence the plic_cpuhp_setup_done check. > > This patch converts PLIC driver into a platform driver so now PLIC > instances are probed after all available CPUs are brought-up. In this > case, the cpuhp setup must be done only after PLIC context of all > available CPUs are initialized otherwise some of the CPUs crash > in plic_starting_cpu() due to lack of PLIC context initialization.
You're missing the point.
Assume you have 8 CPUs and 2 PLIC instances one for CPU0-3 and one for CPU4-7.
Add "maxcpus=4" on the kernel command line, then only the first 4 CPUs are brought up.
So at probe time cpu_online_mask has bit 0,1,2,3 set.
When the first PLIC it probed the loop which checks the context for each online CPU will not clear cpuhp_setup and the hotplug state is installed.
Now the second PLIC is probed (the one for the offline CPUs 4-7) and the loop will again not clear cpuhp_setup and it tries to install the state again, no?
Thanks,
tglx
| |