Error *err = NULL;
{
- OptsVisitor *ov = opts_visitor_new(opts);
- visit_type_NumaOptions(opts_get_visitor(ov), NULL, &object, &err);
- opts_visitor_cleanup(ov);
+ Visitor *v = opts_visitor_new(opts);
+ visit_type_NumaOptions(v, NULL, &object, &err);
+ visit_free(v);
}
if (err) {
- goto error;
+ goto end;
}
switch (object->type) {
case NUMA_OPTIONS_KIND_NODE:
numa_node_parse(object->u.node.data, opts, &err);
if (err) {
- goto error;
+ goto end;
}
nb_numa_nodes++;
break;
abort();
}
- return 0;
-
-error:
- error_report_err(err);
+end:
qapi_free_NumaOptions(object);
+ if (err) {
+ error_report_err(err);
+ return -1;
+ }
- return -1;
+ return 0;
}
static char *enumerate_cpus(unsigned long *cpus, int max_cpus)
exit(1);
}
+ host_memory_backend_set_mapped(backend, true);
memory_region_add_subregion(mr, addr, seg);
vmstate_register_ram_global(seg);
addr += size;
object_child_foreach(obj, query_memdev, &list);
return list;
}
+
+int numa_get_node_for_cpu(int idx)
+{
+ int i;
+
+ for (i = 0; i < nb_numa_nodes; i++) {
+ if (test_bit(idx, numa_info[i].node_cpu)) {
+ break;
+ }
+ }
+ return i;
+}