Re: [PATCH v6 01/11] x86/apic/x2apic: Fix parallel handling of cluster_mask

From: Thomas Gleixner
Date: Tue Feb 07 2023 - 09:24:56 EST


On Tue, Feb 07 2023 at 11:27, David Woodhouse wrote:
> On Tue, 2023-02-07 at 10:57 +0000, David Woodhouse wrote:
>>  • This CPU was present but no other CPU in this cluster was actually
>>    brought up at boot time so the cluster_mask wasn't allocated.
>>
>> The code looks right, I don't grok the comment about partial clusters
>> and virtualization, and would have worded it something along the above
>> lines?
>
> As I get my head around that, I think the code needs to change too.
> What if we *unplug* the only CPU in a cluster (present→possible), then
> add a new one in the same cluster? The new one would get a new
> cluster_mask. Which is kind of OK for now but then if we re-add the
> original CPU it'd continue to use its old cluster_mask.

Indeed.

> Now, that's kind of weird if it's physical CPUs because that cluster is
> within a given chip, isn't it? But with virtualization maybe that's
> something that could happen, and it doesn't hurt to be completely safe
> by using for_each_possible_cpu() instead?

Yes. Virtualization does aweful things....

> Now looks like this:
> /*
> * On post boot hotplug for a CPU which was not present at boot time,
> * iterate over all possible CPUs (even those which are not present
> * any more) to find any existing cluster mask.
> */
> for_each_possible_cpu(cpu_i) {

Looks good!

tglx