[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 088/103] qmp: add query-memdev
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 088/103] qmp: add query-memdev |
Date: |
Tue, 17 Jun 2014 20:41:43 +0300 |
From: Hu Tao <address@hidden>
Add qmp command query-memdev to query for information
of memory devices
Signed-off-by: Hu Tao <address@hidden>
Acked-by: Michael S. Tsirkin <address@hidden>
---
qapi-schema.json | 40 +++++++++++++++++++++++++++
numa.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
qmp-commands.hx | 38 +++++++++++++++++++++++++
3 files changed, 162 insertions(+)
diff --git a/qapi-schema.json b/qapi-schema.json
index fa1b876..4c367d0 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -4796,3 +4796,43 @@
##
{ 'enum': 'HostMemPolicy',
'data': [ 'default', 'preferred', 'bind', 'interleave' ] }
+
+##
+# @Memdev:
+#
+# Information of memory device
+#
+# @size: memory device size
+#
+# @merge: enables or disables memory merge support
+#
+# @dump: includes memory device's memory in a core dump or not
+#
+# @prealloc: enables or disables memory preallocation
+#
+# @host-nodes: host nodes for its memory policy
+#
+# @policy: memory policy of memory device
+#
+# Since: 2.1
+##
+
+{ 'type': 'Memdev',
+ 'data': {
+ 'size': 'size',
+ 'merge': 'bool',
+ 'dump': 'bool',
+ 'prealloc': 'bool',
+ 'host-nodes': ['uint16'],
+ 'policy': 'HostMemPolicy' }}
+
+##
+# @query-memdev:
+#
+# Returns information for all memory devices.
+#
+# Returns: a list of @Memdev.
+#
+# Since: 2.1
+##
+{ 'command': 'query-memdev', 'returns': ['Memdev'] }
diff --git a/numa.c b/numa.c
index 711f682..eef0717 100644
--- a/numa.c
+++ b/numa.c
@@ -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;
+}
diff --git a/qmp-commands.hx b/qmp-commands.hx
index d8aa4ed..bb34cd8 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -3572,3 +3572,41 @@ Example:
} } ] }
EQMP
+
+ {
+ .name = "query-memdev",
+ .args_type = "",
+ .mhandler.cmd_new = qmp_marshal_input_query_memdev,
+ },
+
+SQMP
+query-memdev
+------------
+
+Show memory devices information.
+
+
+Example (1):
+
+-> { "execute": "query-memdev" }
+<- { "return": [
+ {
+ "size": 536870912,
+ "merge": false,
+ "dump": true,
+ "prealloc": false,
+ "host-nodes": [0, 1],
+ "policy": "bind"
+ },
+ {
+ "size": 536870912,
+ "merge": false,
+ "dump": true,
+ "prealloc": true,
+ "host-nodes": [2, 3],
+ "policy": "preferred"
+ }
+ ]
+ }
+
+EQMP
--
MST
- [Qemu-devel] [PULL 048/103] Add G_IO_HUP handler for socket chardev, (continued)
- [Qemu-devel] [PULL 048/103] Add G_IO_HUP handler for socket chardev, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 063/103] NUMA: check if the total numa memory size is equal to ram_size, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 064/103] NUMA: Add numa_info structure to contain numa nodes info, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 099/103] qmp: add query-memory-devices command, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 100/103] acpi: introduce TYPE_ACPI_DEVICE_IF interface, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 062/103] NUMA: move numa related code to new file numa.c, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 097/103] pc: acpi: do not hardcode preprocessor, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 098/103] numa: handle mmaped memory allocation failure correctly, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 102/103] qmp: add query-acpi-ospm-status command, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 036/103] virtio: Drop superfluous conditionals around g_free(), Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 088/103] qmp: add query-memdev,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 034/103] acpi: update generated files, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 060/103] libqemustub: add stubs to be able to use qemu-char.c, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 068/103] qmp: improve error reporting for -object and object-add, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 035/103] acpi-test: update expected tables, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 086/103] hostmem: add property to map memory with MAP_SHARED, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 046/103] Add chardev API qemu_chr_fe_set_msgfds, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 087/103] hostmem: add properties for NUMA memory policy, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 103/103] qmp: add ACPI_DEVICE_OST event handling, Michael S. Tsirkin, 2014/06/17
- [Qemu-devel] [PULL 101/103] acpi: implement ospm_status() method for PIIX4/ICH9_LPC devices, Michael S. Tsirkin, 2014/06/17
- Re: [Qemu-devel] [PULL 000/103] pc, pci, virtio, hotplug fixes, enhancements for 2.1, Peter Maydell, 2014/06/18