From: Keir Fraser Date: Fri, 13 Aug 2010 13:56:15 +0000 (+0100) Subject: sysctl: Return physinfo.max_{cpu,node}_id as maximum *possible* IDs. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~11648 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=56b6043791a3bc00097836cc5f1d02bd56c472a5;p=xen.git sysctl: Return physinfo.max_{cpu,node}_id as maximum *possible* IDs. In particular, this fixes setting vcpu affinities via libxl. Previously, the affinity mask would be narrowed to the maximum currently-online CPU. So future hotplugged CPUs could not be expressed. Signed-off-by: Keir Fraser --- diff --git a/xen/arch/ia64/xen/dom0_ops.c b/xen/arch/ia64/xen/dom0_ops.c index 6c44cc8e53..7eb446623a 100644 --- a/xen/arch/ia64/xen/dom0_ops.c +++ b/xen/arch/ia64/xen/dom0_ops.c @@ -736,8 +736,8 @@ long arch_do_sysctl(xen_sysctl_t *op, XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl) pi->scrub_pages = 0; pi->cpu_khz = local_cpu_data->proc_freq / 1000; - pi->max_node_id = last_node(node_online_map); - pi->max_cpu_id = last_cpu(cpu_online_map); + pi->max_node_id = MAX_NUMNODES-1; + pi->max_cpu_id = NR_CPUS-1; if ( copy_field_to_guest(u_sysctl, op, u.physinfo) ) ret = -EFAULT; diff --git a/xen/arch/x86/sysctl.c b/xen/arch/x86/sysctl.c index 5d22c5acb5..ac7b56a29b 100644 --- a/xen/arch/x86/sysctl.c +++ b/xen/arch/x86/sysctl.c @@ -62,8 +62,8 @@ long arch_do_sysctl( cpus_weight(per_cpu(cpu_core_map, 0)) / pi->threads_per_core; pi->nr_cpus = num_online_cpus(); pi->nr_nodes = num_online_nodes(); - pi->max_node_id = last_node(node_online_map); - pi->max_cpu_id = last_cpu(cpu_online_map); + pi->max_node_id = MAX_NUMNODES-1; + pi->max_cpu_id = NR_CPUS-1; pi->total_pages = total_pages; pi->free_pages = avail_domheap_pages(); pi->scrub_pages = 0; diff --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h index d35237a5e7..1762180c39 100644 --- a/xen/include/public/sysctl.h +++ b/xen/include/public/sysctl.h @@ -93,8 +93,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_sysctl_tbuf_op_t); struct xen_sysctl_physinfo { uint32_t threads_per_core; uint32_t cores_per_socket; - uint32_t nr_cpus, max_cpu_id; - uint32_t nr_nodes, max_node_id; + uint32_t nr_cpus; /* # CPUs currently online */ + uint32_t max_cpu_id; /* Largest possible CPU ID on this host */ + uint32_t nr_nodes; /* # nodes currently online */ + uint32_t max_node_id; /* Largest possible node ID on this host */ uint32_t cpu_khz; uint64_aligned_t total_pages; uint64_aligned_t free_pages;