Hi, Eduardo
At 01/18/2017 08:56 PM, Eduardo Habkost wrote:
On Wed, Jan 18, 2017 at 08:40:05PM +0800, Dou Liyang wrote:
Current default way of seting the CPUState::numa_node might be wrong
in case on cold/hot-plug CPUs. Making the users confused why the
NUMA info is different beetween the guests and monitor.
Make the mapping of CPUs and NUMA nodes in qom/cpu.c:
cpu_common_realizefn(), where each VCPUs need to realize.
Signed-off-by: Dou Liyang <douly.f...@cn.fujitsu.com>
parse_numa_opts() is called a long time before any CPU is
created, so this should be safe.
Reviewed-by: Eduardo Habkost <ehabk...@redhat.com>
(But we can squash patch 2/3 and patch 3/3 in this patch).
OK, :)
Thanks,
Liyang.
---
qom/cpu.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/qom/cpu.c b/qom/cpu.c
index 61ee0cb..e08dceb 100644
--- a/qom/cpu.c
+++ b/qom/cpu.c
@@ -23,6 +23,7 @@
#include "qemu-common.h"
#include "qom/cpu.h"
#include "sysemu/kvm.h"
+#include "sysemu/numa.h"
#include "qemu/notify.h"
#include "qemu/log.h"
#include "exec/log.h"
@@ -338,6 +339,18 @@ static void cpu_common_parse_features(const char
*typename, char *features,
}
}
+static void cpu_common_map_numa_node(CPUState *cpu)
+{
+ int i;
+
+ for (i = 0; i < nb_numa_nodes; i++) {
+ assert(cpu->cpu_index < max_cpus);
+ if (test_bit(cpu->cpu_index, numa_info[i].node_cpu)) {
+ cpu->numa_node = i;
+ }
+ }
+}
+
static void cpu_common_realizefn(DeviceState *dev, Error **errp)
{
CPUState *cpu = CPU(dev);
@@ -347,6 +360,8 @@ static void cpu_common_realizefn(DeviceState *dev, Error
**errp)
cpu_resume(cpu);
}
+ cpu_common_map_numa_node(cpu);
+
/* NOTE: latest generic point where the cpu is fully realized */
trace_init_vcpu(cpu);
}
--
2.5.5