qmp: add query-memdev

Add qmp command query-memdev to query for information
of memory devices

Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Hu Tao 2014-06-16 18:05:41 +08:00 committed by Michael S. Tsirkin
parent 4cf1b76bf1
commit 76b5d8507d
3 changed files with 162 additions and 0 deletions

84
numa.c
View file

@ -34,6 +34,7 @@
#include "qapi/qmp/qerror.h"
#include "hw/boards.h"
#include "sysemu/hostmem.h"
#include "qmp-commands.h"
QemuOptsList qemu_numa_opts = {
.name = "numa",
@ -283,3 +284,86 @@ void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner,
addr += size;
}
}
static int query_memdev(Object *obj, void *opaque)
{
MemdevList **list = opaque;
Error *err = NULL;
if (object_dynamic_cast(obj, TYPE_MEMORY_BACKEND)) {
MemdevList *m = g_malloc0(sizeof(*m));
m->value = g_malloc0(sizeof(*m->value));
m->value->size = object_property_get_int(obj, "size",
&err);
if (err) {
goto error;
}
m->value->merge = object_property_get_bool(obj, "merge",
&err);
if (err) {
goto error;
}
m->value->dump = object_property_get_bool(obj, "dump",
&err);
if (err) {
goto error;
}
m->value->prealloc = object_property_get_bool(obj,
"prealloc", &err);
if (err) {
goto error;
}
m->value->policy = object_property_get_enum(obj,
"policy",
HostMemPolicy_lookup,
&err);
if (err) {
goto error;
}
object_property_get_uint16List(obj, "host-nodes",
&m->value->host_nodes, &err);
if (err) {
goto error;
}
m->next = *list;
*list = m;
}
return 0;
error:
return -1;
}
MemdevList *qmp_query_memdev(Error **errp)
{
Object *obj;
MemdevList *list = NULL, *m;
obj = object_resolve_path("/objects", NULL);
if (obj == NULL) {
return NULL;
}
if (object_child_foreach(obj, query_memdev, &list) != 0) {
goto error;
}
return list;
error:
while (list) {
m = list;
list = list->next;
g_free(m->value);
g_free(m);
}
return NULL;
}