projects
/
sdk
/
emulator
/
qemu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Don't look up pid/tid on YAGL_LOG_FUNC_SET
[sdk/emulator/qemu.git]
/
numa.c
diff --git
a/numa.c
b/numa.c
index
e9b18f5
..
9c09e45
100644
(file)
--- a/
numa.c
+++ b/
numa.c
@@
-22,6
+22,7
@@
* THE SOFTWARE.
*/
* THE SOFTWARE.
*/
+#include "qemu/osdep.h"
#include "sysemu/numa.h"
#include "exec/cpu-common.h"
#include "qemu/bitmap.h"
#include "sysemu/numa.h"
#include "exec/cpu-common.h"
#include "qemu/bitmap.h"
@@
-30,7
+31,6
@@
#include "include/exec/cpu-common.h" /* for RAM_ADDR_FMT */
#include "qapi-visit.h"
#include "qapi/opts-visitor.h"
#include "include/exec/cpu-common.h" /* for RAM_ADDR_FMT */
#include "qapi-visit.h"
#include "qapi/opts-visitor.h"
-#include "qapi/dealloc-visitor.h"
#include "hw/boards.h"
#include "sysemu/hostmem.h"
#include "qmp-commands.h"
#include "hw/boards.h"
#include "sysemu/hostmem.h"
#include "qmp-commands.h"
@@
-217,20
+217,20
@@
static int parse_numa(void *opaque, QemuOpts *opts, Error **errp)
Error *err = NULL;
{
Error *err = NULL;
{
-
OptsVisitor *o
v = opts_visitor_new(opts);
- visit_type_NumaOptions(
opts_get_visitor(ov), &object, NULL
, &err);
-
opts_visitor_cleanup(o
v);
+
Visitor *
v = opts_visitor_new(opts);
+ visit_type_NumaOptions(
v, NULL, &object
, &err);
+
visit_free(
v);
}
if (err) {
}
if (err) {
- goto e
rror
;
+ goto e
nd
;
}
}
- switch (object->
kind
) {
+ switch (object->
type
) {
case NUMA_OPTIONS_KIND_NODE:
case NUMA_OPTIONS_KIND_NODE:
- numa_node_parse(object->
node
, opts, &err);
+ numa_node_parse(object->
u.node.data
, opts, &err);
if (err) {
if (err) {
- goto e
rror
;
+ goto e
nd
;
}
nb_numa_nodes++;
break;
}
nb_numa_nodes++;
break;
@@
-238,19
+238,14
@@
static int parse_numa(void *opaque, QemuOpts *opts, Error **errp)
abort();
}
abort();
}
- return 0;
-
-error:
- error_report_err(err);
-
- if (object) {
- QapiDeallocVisitor *dv = qapi_dealloc_visitor_new();
- visit_type_NumaOptions(qapi_dealloc_get_visitor(dv),
- &object, NULL, NULL);
- qapi_dealloc_visitor_cleanup(dv);
+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)
}
static char *enumerate_cpus(unsigned long *cpus, int max_cpus)
@@
-418,12
+413,15
@@
static void allocate_system_memory_nonnuma(MemoryRegion *mr, Object *owner,
Error *err = NULL;
memory_region_init_ram_from_file(mr, owner, name, ram_size, false,
mem_path, &err);
Error *err = NULL;
memory_region_init_ram_from_file(mr, owner, name, ram_size, false,
mem_path, &err);
-
- /* Legacy behavior: if allocation failed, fall back to
- * regular RAM allocation.
- */
if (err) {
error_report_err(err);
if (err) {
error_report_err(err);
+ if (mem_prealloc) {
+ exit(1);
+ }
+
+ /* Legacy behavior: if allocation failed, fall back to
+ * regular RAM allocation.
+ */
memory_region_init_ram(mr, owner, name, ram_size, &error_fatal);
}
#else
memory_region_init_ram(mr, owner, name, ram_size, &error_fatal);
}
#else
@@
-450,17
+448,13
@@
void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner,
memory_region_init(mr, owner, name, ram_size);
for (i = 0; i < MAX_NODES; i++) {
memory_region_init(mr, owner, name, ram_size);
for (i = 0; i < MAX_NODES; i++) {
- Error *local_err = NULL;
uint64_t size = numa_info[i].node_mem;
HostMemoryBackend *backend = numa_info[i].node_memdev;
if (!backend) {
continue;
}
uint64_t size = numa_info[i].node_mem;
HostMemoryBackend *backend = numa_info[i].node_memdev;
if (!backend) {
continue;
}
- MemoryRegion *seg = host_memory_backend_get_memory(backend, &local_err);
- if (local_err) {
- error_report_err(local_err);
- exit(1);
- }
+ MemoryRegion *seg = host_memory_backend_get_memory(backend,
+ &error_fatal);
if (memory_region_is_mapped(seg)) {
char *path = object_get_canonical_path_component(OBJECT(backend));
if (memory_region_is_mapped(seg)) {
char *path = object_get_canonical_path_component(OBJECT(backend));
@@
-470,6
+464,7
@@
void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner,
exit(1);
}
exit(1);
}
+ host_memory_backend_set_mapped(backend, true);
memory_region_add_subregion(mr, addr, seg);
vmstate_register_ram_global(seg);
addr += size;
memory_region_add_subregion(mr, addr, seg);
vmstate_register_ram_global(seg);
addr += size;
@@
-487,9
+482,9
@@
static void numa_stat_memory_devices(uint64_t node_mem[])
MemoryDeviceInfo *value = info->value;
if (value) {
MemoryDeviceInfo *value = info->value;
if (value) {
- switch (value->
kind
) {
+ switch (value->
type
) {
case MEMORY_DEVICE_INFO_KIND_DIMM:
case MEMORY_DEVICE_INFO_KIND_DIMM:
- node_mem[value->
dimm->node] += value->dimm
->size;
+ node_mem[value->
u.dimm.data->node] += value->u.dimm.data
->size;
break;
default:
break;
break;
default:
break;
@@
-517,7
+512,6
@@
static int query_memdev(Object *obj, void *opaque)
{
MemdevList **list = opaque;
MemdevList *m = NULL;
{
MemdevList **list = opaque;
MemdevList *m = NULL;
- Error *err = NULL;
if (object_dynamic_cast(obj, TYPE_MEMORY_BACKEND)) {
m = g_malloc0(sizeof(*m));
if (object_dynamic_cast(obj, TYPE_MEMORY_BACKEND)) {
m = g_malloc0(sizeof(*m));
@@
-525,72
+519,46
@@
static int query_memdev(Object *obj, void *opaque)
m->value = g_malloc0(sizeof(*m->value));
m->value->size = object_property_get_int(obj, "size",
m->value = g_malloc0(sizeof(*m->value));
m->value->size = object_property_get_int(obj, "size",
- &err);
- if (err) {
- goto error;
- }
-
+ &error_abort);
m->value->merge = object_property_get_bool(obj, "merge",
m->value->merge = object_property_get_bool(obj, "merge",
- &err);
- if (err) {
- goto error;
- }
-
+ &error_abort);
m->value->dump = object_property_get_bool(obj, "dump",
m->value->dump = object_property_get_bool(obj, "dump",
- &err);
- if (err) {
- goto error;
- }
-
+ &error_abort);
m->value->prealloc = object_property_get_bool(obj,
m->value->prealloc = object_property_get_bool(obj,
- "prealloc", &err);
- if (err) {
- goto error;
- }
-
+ "prealloc",
+ &error_abort);
m->value->policy = object_property_get_enum(obj,
"policy",
"HostMemPolicy",
m->value->policy = object_property_get_enum(obj,
"policy",
"HostMemPolicy",
- &err);
- if (err) {
- goto error;
- }
-
+ &error_abort);
object_property_get_uint16List(obj, "host-nodes",
object_property_get_uint16List(obj, "host-nodes",
- &m->value->host_nodes, &err);
- if (err) {
- goto error;
- }
+ &m->value->host_nodes,
+ &error_abort);
m->next = *list;
*list = m;
}
return 0;
m->next = *list;
*list = m;
}
return 0;
-error:
- g_free(m->value);
- g_free(m);
-
- return -1;
}
MemdevList *qmp_query_memdev(Error **errp)
{
}
MemdevList *qmp_query_memdev(Error **errp)
{
- Object *obj;
+ Object *obj
= object_get_objects_root()
;
MemdevList *list = NULL;
MemdevList *list = NULL;
- obj = object_get_objects_root();
- if (obj == NULL) {
- return NULL;
- }
-
- if (object_child_foreach(obj, query_memdev, &list) != 0) {
- goto error;
- }
-
+ object_child_foreach(obj, query_memdev, &list);
return list;
return list;
+}
-error:
- qapi_free_MemdevList(list);
- return NULL;
+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;
}
}