Messages in this thread | ![/](/images/icornerl.gif) | | Date | Thu, 10 Aug 2023 16:56:11 +0530 | Subject | Re: [PATCH] x86/smp: Validate APIC ID before parking CPU in INIT | From | Vasant Hegde <> |
| |
Hi,
On 8/10/2023 12:22 AM, Thomas Gleixner wrote: > On Wed, Aug 09 2023 at 20:42, Thomas Gleixner wrote: >> On Wed, Jul 19 2023 at 05:13, Vasant Hegde wrote: >>> diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c >>> index e1aa2cd7734b..e5ca0689c4dd 100644 >>> --- a/arch/x86/kernel/smpboot.c >>> +++ b/arch/x86/kernel/smpboot.c >>> @@ -1360,7 +1360,7 @@ bool smp_park_other_cpus_in_init(void) >>> if (cpu == this_cpu) >>> continue; >>> apicid = apic->cpu_present_to_apicid(cpu); >>> - if (apicid == BAD_APICID) >>> + if (apicid == BAD_APICID || !apic->apic_id_valid(apicid)) >>> continue; >>> send_init_sequence(apicid); >>> } > > I think this papers over the underlying problem that this sends INIT to > an APIC which was never booted. The below is curing the root cause.
I have tested below patch and it fixes the issue. Thanks
Tested-by: Vasant Hegde <vasant.hegde@amd.com>
-Vasant
> > Thanks, > > tglx > --- > --- a/arch/x86/kernel/smpboot.c > +++ b/arch/x86/kernel/smpboot.c > @@ -1356,7 +1356,7 @@ bool smp_park_other_cpus_in_init(void) > if (this_cpu) > return false; > > - for_each_present_cpu(cpu) { > + for_each_cpu_and(cpu, &cpus_booted_once_mask, cpu_present_mask) { > if (cpu == this_cpu) > continue; > apicid = apic->cpu_present_to_apicid(cpu);
| ![\](/images/icornerr.gif) |