Uninitialized cpu_data[] entries have the apicid field set to BAD_APICID,
not boot_cpu_data.apicid. Fix the check in cpu_smpboot_free() to use the
correct condition.
Fixes: 7126b7f806d5 ("x86/CPU: re-work populating of cpu_data[]")
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
xen/arch/x86/smpboot.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c
index 491cbbba33ae..ff05955bae40 100644
--- a/xen/arch/x86/smpboot.c
+++ b/xen/arch/x86/smpboot.c
@@ -961,8 +961,7 @@ static void cpu_smpboot_free(unsigned int cpu, bool remove)
* In that case the socket number cannot be relied upon, but the respective
* socket_cpumask[] slot also wouldn't have been set.
*/
- if ( c[cpu].apicid != boot_cpu_data.apicid &&
- cpumask_empty(socket_cpumask[socket]) )
+ if ( c[cpu].apicid != BAD_APICID && cpumask_empty(socket_cpumask[socket]) )
{
xfree(socket_cpumask[socket]);
socket_cpumask[socket] = NULL;
--
2.53.0
On 30/04/2026 12:46 pm, Roger Pau Monne wrote:
> Uninitialized cpu_data[] entries have the apicid field set to BAD_APICID,
> not boot_cpu_data.apicid. Fix the check in cpu_smpboot_free() to use the
> correct condition.
>
> Fixes: 7126b7f806d5 ("x86/CPU: re-work populating of cpu_data[]")
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> ---
> xen/arch/x86/smpboot.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c
> index 491cbbba33ae..ff05955bae40 100644
> --- a/xen/arch/x86/smpboot.c
> +++ b/xen/arch/x86/smpboot.c
> @@ -961,8 +961,7 @@ static void cpu_smpboot_free(unsigned int cpu, bool remove)
> * In that case the socket number cannot be relied upon, but the respective
> * socket_cpumask[] slot also wouldn't have been set.
> */
> - if ( c[cpu].apicid != boot_cpu_data.apicid &&
> - cpumask_empty(socket_cpumask[socket]) )
> + if ( c[cpu].apicid != BAD_APICID && cpumask_empty(socket_cpumask[socket]) )
> {
> xfree(socket_cpumask[socket]);
> socket_cpumask[socket] = NULL;
Yet more fallout from that change...
This is the singular use of apicid. We should consider removing it, but
that's a change for later.
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Le 30/04/2026 à 13:47, Roger Pau Monne a écrit :
> Uninitialized cpu_data[] entries have the apicid field set to BAD_APICID,
> not boot_cpu_data.apicid. Fix the check in cpu_smpboot_free() to use the
> correct condition.
>
> Fixes: 7126b7f806d5 ("x86/CPU: re-work populating of cpu_data[]")
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
> ---
> xen/arch/x86/smpboot.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c
> index 491cbbba33ae..ff05955bae40 100644
> --- a/xen/arch/x86/smpboot.c
> +++ b/xen/arch/x86/smpboot.c
> @@ -961,8 +961,7 @@ static void cpu_smpboot_free(unsigned int cpu, bool remove)
> * In that case the socket number cannot be relied upon, but the respective
> * socket_cpumask[] slot also wouldn't have been set.
> */
> - if ( c[cpu].apicid != boot_cpu_data.apicid &&
> - cpumask_empty(socket_cpumask[socket]) )
> + if ( c[cpu].apicid != BAD_APICID && cpumask_empty(socket_cpumask[socket]) )
> {
> xfree(socket_cpumask[socket]);
> socket_cpumask[socket] = NULL;
Reviewed-by: Teddy Astie <teddy.astie@vates.tech>
--
Teddy Astie | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
© 2016 - 2026 Red Hat, Inc.