sysctl: Return physinfo.max_{cpu,node}_id as maximum *possible* IDs.
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 13 Aug 2010 13:56:15 +0000 (14:56 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 13 Aug 2010 13:56:15 +0000 (14:56 +0100)
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 <keir.fraser@citrix.com>
xen/arch/ia64/xen/dom0_ops.c
xen/arch/x86/sysctl.c
xen/include/public/sysctl.h

index 6c44cc8e53772f57b21d866210f0633d46cfe98b..7eb446623aff8f6df47424bab342b725d8f3e0f8 100644 (file)
@@ -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;
index 5d22c5acb538661fd9feb618cbea88d0e9786bac..ac7b56a29b1154c05c29473d9590318075940084 100644 (file)
@@ -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;
index d35237a5e7720da212b63d140808b33bcf5e5004..1762180c39667312799d906b4340d7907dc72280 100644 (file)
@@ -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;