Message ID | 1393941656-29068-3-git-send-email-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
On 03/04/2014 07:00 AM, Paolo Bonzini wrote: > From: Wanlong Gao <gaowanlong@cn.fujitsu.com> > > If the total number of the assigned numa nodes memory is not > equal to the assigned ram size, it will write the wrong data > to ACPI talb, then the guest will ignore the wrong ACPI table s/talb/table/ > and recognize all memory to one node. It's buggy, we should > check it to ensure that we write the right data to ACPI table. > > Signed-off-by: Wanlong Gao <gaowanlong@cn.fujitsu.com> > Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > numa.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > + if (numa_total != ram_size) { > + fprintf(stderr, "qemu: numa nodes total memory size " > + "should equal to ram_size\n"); Is it worth also printing numa_total or ram_size values in this error message?
Il 04/03/2014 18:00, Eric Blake ha scritto: > On 03/04/2014 07:00 AM, Paolo Bonzini wrote: >> From: Wanlong Gao <gaowanlong@cn.fujitsu.com> >> >> If the total number of the assigned numa nodes memory is not >> equal to the assigned ram size, it will write the wrong data >> to ACPI talb, then the guest will ignore the wrong ACPI table > > s/talb/table/ > >> and recognize all memory to one node. It's buggy, we should >> check it to ensure that we write the right data to ACPI table. >> >> Signed-off-by: Wanlong Gao <gaowanlong@cn.fujitsu.com> >> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> >> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> >> --- >> numa.c | 11 +++++++++++ >> 1 file changed, 11 insertions(+) >> > >> + if (numa_total != ram_size) { >> + fprintf(stderr, "qemu: numa nodes total memory size " >> + "should equal to ram_size\n"); > > Is it worth also printing numa_total or ram_size values in this error > message? Good idea. Paolo
diff --git a/numa.c b/numa.c index 395c14f..8ba66f1 100644 --- a/numa.c +++ b/numa.c @@ -127,6 +127,7 @@ void numa_add(const char *optarg) void set_numa_nodes(void) { if (nb_numa_nodes > 0) { + uint64_t numa_total; int i; if (nb_numa_nodes > MAX_NODES) { @@ -154,6 +155,16 @@ void set_numa_nodes(void) node_mem[i] = ram_size - usedmem; } + numa_total = 0; + for (i = 0; i < nb_numa_nodes; i++) { + numa_total += node_mem[i]; + } + if (numa_total != ram_size) { + fprintf(stderr, "qemu: numa nodes total memory size " + "should equal to ram_size\n"); + exit(1); + } + for (i = 0; i < nb_numa_nodes; i++) { if (!bitmap_empty(node_cpumask[i], MAX_CPUMASK_BITS)) { break;