File 5b8fae26-xen-fill-topology-info-for-all-present-cpus.patch of Package xen.17119
Subject: xen: fill topology info for all present cpus
From: Juergen Gross jgross@suse.com Fri Aug 31 17:22:05 2018 +0200
Date: Wed Sep 5 11:21:26 2018 +0100:
Git: 780e2d309812e54353259bb9e6c28886e994b065
The topology information obtainable via XEN_SYSCTL_cputopoinfo is
filled rather weird: the size of the array is derived from the highest
online cpu number, so in case there are trailing offline cpus they
will not be included.
On a dual core system with 4 threads booted with smt=0 without this
patch xl info -n will print:
cpu_topology :
cpu: core socket node
0: 0 0 0
1: 0 0 0
2: 1 0 0
while with this patch the output is:
cpu_topology :
cpu: core socket node
0: 0 0 0
1: 0 0 0
2: 1 0 0
3: 1 0 0
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Julien Grall <julien.grall@arm.com>
diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c
index 8e83c33..c0aa6bd 100644
--- a/xen/common/sysctl.c
+++ b/xen/common/sysctl.c
@@ -349,7 +349,7 @@ long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl)
unsigned int i, num_cpus;
struct xen_sysctl_cputopoinfo *ti = &op->u.cputopoinfo;
- num_cpus = cpumask_last(&cpu_online_map) + 1;
+ num_cpus = cpumask_last(&cpu_present_map) + 1;
if ( !guest_handle_is_null(ti->cputopo) )
{
struct xen_sysctl_cputopo cputopo = { };