Returns total memory of guest in bytes, including hotplugged memory.
Signed-off-by: Vasilis Liaskovitis vasilis.liaskovitis@profitbricks.com --- hmp-commands.hx | 2 ++ hmp.c | 7 +++++++ hmp.h | 1 + hw/dimm.c | 15 +++++++++++++++ monitor.c | 7 +++++++ qapi-schema.json | 12 ++++++++++++ qmp-commands.hx | 20 ++++++++++++++++++++ 7 files changed, 64 insertions(+), 0 deletions(-)
diff --git a/hmp-commands.hx b/hmp-commands.hx index 3172cde..016062e 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -1461,6 +1461,8 @@ show qdev device model list show roms @item info memhp show memhp +@item info memtotal +show memtotal @end table ETEXI
diff --git a/hmp.c b/hmp.c index ec25d9a..8f89c7d 100644 --- a/hmp.c +++ b/hmp.c @@ -1017,3 +1017,10 @@ void hmp_info_memhp(Monitor *mon)
qapi_free_MemHpInfoList(info); } + +void hmp_info_memtotal(Monitor *mon) +{ + uint64_t ram_total; + ram_total = (uint64_t)qmp_query_memtotal(NULL); + monitor_printf(mon, "MemTotal: %lu \n", ram_total); +} diff --git a/hmp.h b/hmp.h index 971e7c4..d6e715e 100644 --- a/hmp.h +++ b/hmp.h @@ -65,5 +65,6 @@ void hmp_dump_guest_memory(Monitor *mon, const QDict *qdict); void hmp_netdev_add(Monitor *mon, const QDict *qdict); void hmp_netdev_del(Monitor *mon, const QDict *qdict); void hmp_info_memhp(Monitor *mon); +void hmp_info_memtotal(Monitor *mon);
#endif diff --git a/hw/dimm.c b/hw/dimm.c index 6e324d3..b544173 100644 --- a/hw/dimm.c +++ b/hw/dimm.c @@ -28,6 +28,7 @@ static dimm_hotplug_fn dimm_hotplug; static dimm_hotplug_fn dimm_revert; static QTAILQ_HEAD(Dimmlist, DimmState) dimmlist; static QTAILQ_HEAD(dimm_hp_result_head, dimm_hp_result) dimm_hp_result_queue; +extern ram_addr_t ram_size;
static Property dimm_properties[] = { DEFINE_PROP_END_OF_LIST() @@ -292,6 +293,20 @@ MemHpInfoList *qmp_query_memhp(Error **errp)
return head; } + +int64_t qmp_query_memtotal(Error **errp) +{ + DimmState *slot; + uint64_t info = ram_size; + + QTAILQ_FOREACH(slot, &dimmlist, nextdimm) { + if (slot->populated) { + info += slot->size; + } + } + return (int64_t)info; +} + static int dimm_init(SysBusDevice *s) { DimmState *slot; diff --git a/monitor.c b/monitor.c index 4a14e26..1dd646c 100644 --- a/monitor.c +++ b/monitor.c @@ -2739,6 +2739,13 @@ static mon_cmd_t info_cmds[] = { .mhandler.info = hmp_info_memhp, }, { + .name = "memtotal", + .args_type = "", + .params = "", + .help = "show total memory size", + .mhandler.info = hmp_info_memtotal, + }, + { .name = NULL, }, }; diff --git a/qapi-schema.json b/qapi-schema.json index 049f6f9..5bbf2c0 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -1888,3 +1888,15 @@ # Since: 1.1.3 ## { 'command': 'query-memhp', 'returns': ['MemHpInfo'] } + +## +# @query-memtotal: +# +# Returns total memory in bytes, including hotplugged dimms +# +# Returns: a l +# +# Since: 1.2 +## +{ 'command': 'query-memtotal', 'returns': 'int' } + diff --git a/qmp-commands.hx b/qmp-commands.hx index cd1d5f0..6c71696 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -2286,3 +2286,23 @@ Example: }
EQMP + + { + .name = "query-memtotal", + .args_type = "", + .mhandler.cmd_new = qmp_marshal_input_query_memtotal + }, +SQMP +query-memtotal +---------- + +Return total memory in bytes, including hotplugged dimms + +Example: + +-> { "execute": "query-memtotal" } +<- { + "return": 1073741824 + } + +EQMP