@@ -27,6 +27,8 @@
#include "exec/cpu-common.h"
#include "qemu/bitmap.h"
#include "qom/cpu.h"
+#include "qemu/error-report.h"
+#include "include/exec/cpu-common.h" /* for RAM_ADDR_FMT */
static void numa_node_parse_cpus(int nodenr, const char *cpus)
{
@@ -127,6 +129,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 +157,17 @@ 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) {
+ error_report("qemu: total memory size for NUMA nodes (%" PRIu64 ")"
+ " should equal to ram_size (" RAM_ADDR_FMT ")\n",
+ numa_total, ram_size);
+ exit(1);
+ }
+
for (i = 0; i < nb_numa_nodes; i++) {
if (!bitmap_empty(node_cpumask[i], MAX_CPUMASK_BITS)) {
break;