Skip to content

Commit 76b5d85

Browse files
Hu Taomstsirkin
Hu Tao
authored andcommitted
qmp: add query-memdev
Add qmp command query-memdev to query for information of memory devices Signed-off-by: Hu Tao <[email protected]> Acked-by: Michael S. Tsirkin <[email protected]> Signed-off-by: Michael S. Tsirkin <[email protected]>
1 parent 4cf1b76 commit 76b5d85

File tree

3 files changed

+162
-0
lines changed

3 files changed

+162
-0
lines changed

numa.c

+84
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "qapi/qmp/qerror.h"
3535
#include "hw/boards.h"
3636
#include "sysemu/hostmem.h"
37+
#include "qmp-commands.h"
3738

3839
QemuOptsList qemu_numa_opts = {
3940
.name = "numa",
@@ -283,3 +284,86 @@ void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner,
283284
addr += size;
284285
}
285286
}
287+
288+
static int query_memdev(Object *obj, void *opaque)
289+
{
290+
MemdevList **list = opaque;
291+
Error *err = NULL;
292+
293+
if (object_dynamic_cast(obj, TYPE_MEMORY_BACKEND)) {
294+
MemdevList *m = g_malloc0(sizeof(*m));
295+
296+
m->value = g_malloc0(sizeof(*m->value));
297+
298+
m->value->size = object_property_get_int(obj, "size",
299+
&err);
300+
if (err) {
301+
goto error;
302+
}
303+
304+
m->value->merge = object_property_get_bool(obj, "merge",
305+
&err);
306+
if (err) {
307+
goto error;
308+
}
309+
310+
m->value->dump = object_property_get_bool(obj, "dump",
311+
&err);
312+
if (err) {
313+
goto error;
314+
}
315+
316+
m->value->prealloc = object_property_get_bool(obj,
317+
"prealloc", &err);
318+
if (err) {
319+
goto error;
320+
}
321+
322+
m->value->policy = object_property_get_enum(obj,
323+
"policy",
324+
HostMemPolicy_lookup,
325+
&err);
326+
if (err) {
327+
goto error;
328+
}
329+
330+
object_property_get_uint16List(obj, "host-nodes",
331+
&m->value->host_nodes, &err);
332+
if (err) {
333+
goto error;
334+
}
335+
336+
m->next = *list;
337+
*list = m;
338+
}
339+
340+
return 0;
341+
error:
342+
return -1;
343+
}
344+
345+
MemdevList *qmp_query_memdev(Error **errp)
346+
{
347+
Object *obj;
348+
MemdevList *list = NULL, *m;
349+
350+
obj = object_resolve_path("/objects", NULL);
351+
if (obj == NULL) {
352+
return NULL;
353+
}
354+
355+
if (object_child_foreach(obj, query_memdev, &list) != 0) {
356+
goto error;
357+
}
358+
359+
return list;
360+
361+
error:
362+
while (list) {
363+
m = list;
364+
list = list->next;
365+
g_free(m->value);
366+
g_free(m);
367+
}
368+
return NULL;
369+
}

qapi-schema.json

+40
Original file line numberDiff line numberDiff line change
@@ -3154,3 +3154,43 @@
31543154
##
31553155
{ 'enum': 'HostMemPolicy',
31563156
'data': [ 'default', 'preferred', 'bind', 'interleave' ] }
3157+
3158+
##
3159+
# @Memdev:
3160+
#
3161+
# Information of memory device
3162+
#
3163+
# @size: memory device size
3164+
#
3165+
# @merge: enables or disables memory merge support
3166+
#
3167+
# @dump: includes memory device's memory in a core dump or not
3168+
#
3169+
# @prealloc: enables or disables memory preallocation
3170+
#
3171+
# @host-nodes: host nodes for its memory policy
3172+
#
3173+
# @policy: memory policy of memory device
3174+
#
3175+
# Since: 2.1
3176+
##
3177+
3178+
{ 'type': 'Memdev',
3179+
'data': {
3180+
'size': 'size',
3181+
'merge': 'bool',
3182+
'dump': 'bool',
3183+
'prealloc': 'bool',
3184+
'host-nodes': ['uint16'],
3185+
'policy': 'HostMemPolicy' }}
3186+
3187+
##
3188+
# @query-memdev:
3189+
#
3190+
# Returns information for all memory devices.
3191+
#
3192+
# Returns: a list of @Memdev.
3193+
#
3194+
# Since: 2.1
3195+
##
3196+
{ 'command': 'query-memdev', 'returns': ['Memdev'] }

qmp-commands.hx

+38
Original file line numberDiff line numberDiff line change
@@ -3573,4 +3573,42 @@ Example:
35733573
}
35743574
} } ] }
35753575
3576+
EQMP
3577+
3578+
{
3579+
.name = "query-memdev",
3580+
.args_type = "",
3581+
.mhandler.cmd_new = qmp_marshal_input_query_memdev,
3582+
},
3583+
3584+
SQMP
3585+
query-memdev
3586+
------------
3587+
3588+
Show memory devices information.
3589+
3590+
3591+
Example (1):
3592+
3593+
-> { "execute": "query-memdev" }
3594+
<- { "return": [
3595+
{
3596+
"size": 536870912,
3597+
"merge": false,
3598+
"dump": true,
3599+
"prealloc": false,
3600+
"host-nodes": [0, 1],
3601+
"policy": "bind"
3602+
},
3603+
{
3604+
"size": 536870912,
3605+
"merge": false,
3606+
"dump": true,
3607+
"prealloc": true,
3608+
"host-nodes": [2, 3],
3609+
"policy": "preferred"
3610+
}
3611+
]
3612+
}
3613+
35763614
EQMP

0 commit comments

Comments
 (0)