[PATCH] cpu/hotplug: Fix NULL kobject warning in cpuhp_smt_enable()

Jinjie Ruan ruanjinjie at huawei.com
Thu Apr 23 05:32:34 PDT 2026



On 4/23/2026 6:08 PM, Thomas Gleixner wrote:
> On Sat, Apr 18 2026 at 12:55, Catalin Marinas wrote:
>> Another option would have been to avoid marking such CPUs present but I
>> think this will break other things. Yet another option is to register
>> all CPU devices even if they never come up (like maxcpus greater than
>> actual CPUs).
>>
>> Opinions? It might be an arm64+ACPI-only thing.
> 
> I think so. The proper thing to do is to apply sane limits:
> 
>  1) The possible CPUs enumerated by firmware N_POSSIBLE_FW
> 
>  2) The maxcpus limit on the command line N_MAXCPUS_CL
> 
> So the actual possible CPUs evaluates to:
> 
>    num_possible = min(N_POSSIBLE_FW, N_MAXCPUS_CL, CONFIG_NR_CPUS);
> 
> The evaluation of the firmware should not mark CPUs present which are
> actually not. ACPI gives you that information. See:
> 
>          5.2.12.14 GIC CPU Interface (GICC) Structure
> 
> in the ACPI spec. That has two related bits:
> 
> Enabled:
> 
>    If this bit is set, the processor is ready for use. If this bit is
>    clear and the Online Capable bit is set, the system supports enabling
>    this processor during OS runtime. If this bit is clear and the Online
>    Capable bit is also clear, this processor is un- usable, and the
>    operating system support will not attempt to use it.
> 
> Online Capable:
> 
>    The information conveyed by this bit depends on the value of the
>    Enabled bit. If the Enabled bit is set, this bit is reserved and must
>    be zero. Otherwise, if this bit is set, the system supports enabling
>    this processor later during OS runtime
> 
> So the combination of those gives you the right answer:
> 
>    Enabled	Online
>    	        Capable
>    0            0        Not present, not possible
>    0            1        Not present, but possible to "hotplug" layter
>    1            0        Present
>    1            1        Invalid

On x86, it seems that all CPUs with the ACPI_MADT_ENABLED bit set will
be marked as present.

acpi_parse_x2apic()
  -> enabled = processor->lapic_flags & ACPI_MADT_ENABLED
  -> topology_register_apic(enabled)
     -> topo_register_apic(enabled)
        -> set_cpu_present(cpu, true)

> 
> The kernel sizes everything on the number of possible CPUs and the
> present CPU mask is only there to figure out which CPUs are actually
> usable and can be brought up.

> 
> The runtime physical hotplug mechanics use acpi_[un]map_cpu() to toggle
> the present bit.
> 
> Thanks,
> 
>         tglx
> 
> 
> 




More information about the linux-arm-kernel mailing list