155225c85SMarkus Armbruster /*
255225c85SMarkus Armbruster * HMP commands related to machines and CPUs
355225c85SMarkus Armbruster *
455225c85SMarkus Armbruster * Copyright IBM, Corp. 2011
555225c85SMarkus Armbruster *
655225c85SMarkus Armbruster * Authors:
755225c85SMarkus Armbruster * Anthony Liguori <aliguori@us.ibm.com>
855225c85SMarkus Armbruster *
955225c85SMarkus Armbruster * This work is licensed under the terms of the GNU GPL, version 2. See
1055225c85SMarkus Armbruster * the COPYING file in the top-level directory.
1155225c85SMarkus Armbruster *
1255225c85SMarkus Armbruster * Contributions after 2012-01-13 are licensed under the terms of the
1355225c85SMarkus Armbruster * GNU GPL, version 2 or (at your option) any later version.
1455225c85SMarkus Armbruster */
1555225c85SMarkus Armbruster
1655225c85SMarkus Armbruster #include "qemu/osdep.h"
1755225c85SMarkus Armbruster #include "monitor/hmp.h"
1855225c85SMarkus Armbruster #include "monitor/monitor.h"
1955225c85SMarkus Armbruster #include "qapi/error.h"
2055225c85SMarkus Armbruster #include "qapi/qapi-builtin-visit.h"
2155225c85SMarkus Armbruster #include "qapi/qapi-commands-machine.h"
2255225c85SMarkus Armbruster #include "qapi/qmp/qdict.h"
2355225c85SMarkus Armbruster #include "qapi/string-output-visitor.h"
2455225c85SMarkus Armbruster #include "qemu/error-report.h"
2555225c85SMarkus Armbruster #include "sysemu/numa.h"
26aa570207STao Xu #include "hw/boards.h"
2755225c85SMarkus Armbruster
hmp_info_cpus(Monitor * mon,const QDict * qdict)2855225c85SMarkus Armbruster void hmp_info_cpus(Monitor *mon, const QDict *qdict)
2955225c85SMarkus Armbruster {
3055225c85SMarkus Armbruster CpuInfoFastList *cpu_list, *cpu;
3155225c85SMarkus Armbruster
3255225c85SMarkus Armbruster cpu_list = qmp_query_cpus_fast(NULL);
3355225c85SMarkus Armbruster
3455225c85SMarkus Armbruster for (cpu = cpu_list; cpu; cpu = cpu->next) {
3555225c85SMarkus Armbruster int active = ' ';
3655225c85SMarkus Armbruster
3787e6f4a4SKevin Wolf if (cpu->value->cpu_index == monitor_get_cpu_index(mon)) {
3855225c85SMarkus Armbruster active = '*';
3955225c85SMarkus Armbruster }
4055225c85SMarkus Armbruster
4155225c85SMarkus Armbruster monitor_printf(mon, "%c CPU #%" PRId64 ":", active,
4255225c85SMarkus Armbruster cpu->value->cpu_index);
4355225c85SMarkus Armbruster monitor_printf(mon, " thread_id=%" PRId64 "\n", cpu->value->thread_id);
4455225c85SMarkus Armbruster }
4555225c85SMarkus Armbruster
4655225c85SMarkus Armbruster qapi_free_CpuInfoFastList(cpu_list);
4755225c85SMarkus Armbruster }
4855225c85SMarkus Armbruster
hmp_hotpluggable_cpus(Monitor * mon,const QDict * qdict)4955225c85SMarkus Armbruster void hmp_hotpluggable_cpus(Monitor *mon, const QDict *qdict)
5055225c85SMarkus Armbruster {
5155225c85SMarkus Armbruster Error *err = NULL;
5255225c85SMarkus Armbruster HotpluggableCPUList *l = qmp_query_hotpluggable_cpus(&err);
5355225c85SMarkus Armbruster HotpluggableCPUList *saved = l;
5455225c85SMarkus Armbruster CpuInstanceProperties *c;
5555225c85SMarkus Armbruster
560ca117a7SDaniel P. Berrangé if (hmp_handle_error(mon, err)) {
5755225c85SMarkus Armbruster return;
5855225c85SMarkus Armbruster }
5955225c85SMarkus Armbruster
6055225c85SMarkus Armbruster monitor_printf(mon, "Hotpluggable CPUs:\n");
6155225c85SMarkus Armbruster while (l) {
6255225c85SMarkus Armbruster monitor_printf(mon, " type: \"%s\"\n", l->value->type);
6355225c85SMarkus Armbruster monitor_printf(mon, " vcpus_count: \"%" PRIu64 "\"\n",
6455225c85SMarkus Armbruster l->value->vcpus_count);
65fe8ac1faSMarkus Armbruster if (l->value->qom_path) {
6655225c85SMarkus Armbruster monitor_printf(mon, " qom_path: \"%s\"\n", l->value->qom_path);
6755225c85SMarkus Armbruster }
6855225c85SMarkus Armbruster
6955225c85SMarkus Armbruster c = l->value->props;
7055225c85SMarkus Armbruster monitor_printf(mon, " CPUInstance Properties:\n");
7155225c85SMarkus Armbruster if (c->has_node_id) {
7255225c85SMarkus Armbruster monitor_printf(mon, " node-id: \"%" PRIu64 "\"\n", c->node_id);
7355225c85SMarkus Armbruster }
74bb2df37aSPierre Morel if (c->has_drawer_id) {
75bb2df37aSPierre Morel monitor_printf(mon, " drawer-id: \"%" PRIu64 "\"\n", c->drawer_id);
76bb2df37aSPierre Morel }
77bb2df37aSPierre Morel if (c->has_book_id) {
78bb2df37aSPierre Morel monitor_printf(mon, " book-id: \"%" PRIu64 "\"\n", c->book_id);
79bb2df37aSPierre Morel }
8055225c85SMarkus Armbruster if (c->has_socket_id) {
8155225c85SMarkus Armbruster monitor_printf(mon, " socket-id: \"%" PRIu64 "\"\n", c->socket_id);
8255225c85SMarkus Armbruster }
83176d2cdaSLike Xu if (c->has_die_id) {
84176d2cdaSLike Xu monitor_printf(mon, " die-id: \"%" PRIu64 "\"\n", c->die_id);
85176d2cdaSLike Xu }
861dcf7001SGavin Shan if (c->has_cluster_id) {
871dcf7001SGavin Shan monitor_printf(mon, " cluster-id: \"%" PRIu64 "\"\n",
881dcf7001SGavin Shan c->cluster_id);
891dcf7001SGavin Shan }
90*989bb312SZhao Liu if (c->has_module_id) {
91*989bb312SZhao Liu monitor_printf(mon, " module-id: \"%" PRIu64 "\"\n",
92*989bb312SZhao Liu c->module_id);
93*989bb312SZhao Liu }
9455225c85SMarkus Armbruster if (c->has_core_id) {
9555225c85SMarkus Armbruster monitor_printf(mon, " core-id: \"%" PRIu64 "\"\n", c->core_id);
9655225c85SMarkus Armbruster }
9755225c85SMarkus Armbruster if (c->has_thread_id) {
9855225c85SMarkus Armbruster monitor_printf(mon, " thread-id: \"%" PRIu64 "\"\n", c->thread_id);
9955225c85SMarkus Armbruster }
10055225c85SMarkus Armbruster
10155225c85SMarkus Armbruster l = l->next;
10255225c85SMarkus Armbruster }
10355225c85SMarkus Armbruster
10455225c85SMarkus Armbruster qapi_free_HotpluggableCPUList(saved);
10555225c85SMarkus Armbruster }
10655225c85SMarkus Armbruster
hmp_info_memdev(Monitor * mon,const QDict * qdict)10755225c85SMarkus Armbruster void hmp_info_memdev(Monitor *mon, const QDict *qdict)
10855225c85SMarkus Armbruster {
10955225c85SMarkus Armbruster Error *err = NULL;
11055225c85SMarkus Armbruster MemdevList *memdev_list = qmp_query_memdev(&err);
11155225c85SMarkus Armbruster MemdevList *m = memdev_list;
11255225c85SMarkus Armbruster Visitor *v;
11355225c85SMarkus Armbruster char *str;
11455225c85SMarkus Armbruster
11555225c85SMarkus Armbruster while (m) {
11655225c85SMarkus Armbruster v = string_output_visitor_new(false, &str);
1171f584248SMarkus Armbruster visit_type_uint16List(v, NULL, &m->value->host_nodes, &error_abort);
11855225c85SMarkus Armbruster monitor_printf(mon, "memory backend: %s\n", m->value->id);
11955225c85SMarkus Armbruster monitor_printf(mon, " size: %" PRId64 "\n", m->value->size);
12055225c85SMarkus Armbruster monitor_printf(mon, " merge: %s\n",
12155225c85SMarkus Armbruster m->value->merge ? "true" : "false");
12255225c85SMarkus Armbruster monitor_printf(mon, " dump: %s\n",
12355225c85SMarkus Armbruster m->value->dump ? "true" : "false");
12455225c85SMarkus Armbruster monitor_printf(mon, " prealloc: %s\n",
12555225c85SMarkus Armbruster m->value->prealloc ? "true" : "false");
1267428e7baSDavid Hildenbrand monitor_printf(mon, " share: %s\n",
1277428e7baSDavid Hildenbrand m->value->share ? "true" : "false");
128baa014e3SDavid Hildenbrand if (m->value->has_reserve) {
129baa014e3SDavid Hildenbrand monitor_printf(mon, " reserve: %s\n",
130baa014e3SDavid Hildenbrand m->value->reserve ? "true" : "false");
131baa014e3SDavid Hildenbrand }
13255225c85SMarkus Armbruster monitor_printf(mon, " policy: %s\n",
13355225c85SMarkus Armbruster HostMemPolicy_str(m->value->policy));
13455225c85SMarkus Armbruster visit_complete(v, &str);
13555225c85SMarkus Armbruster monitor_printf(mon, " host nodes: %s\n", str);
13655225c85SMarkus Armbruster
13755225c85SMarkus Armbruster g_free(str);
13855225c85SMarkus Armbruster visit_free(v);
13955225c85SMarkus Armbruster m = m->next;
14055225c85SMarkus Armbruster }
14155225c85SMarkus Armbruster
14255225c85SMarkus Armbruster monitor_printf(mon, "\n");
14355225c85SMarkus Armbruster
14455225c85SMarkus Armbruster qapi_free_MemdevList(memdev_list);
145187c6147SVladimir Sementsov-Ogievskiy hmp_handle_error(mon, err);
14655225c85SMarkus Armbruster }
14785ea9dfeSMarkus Armbruster
hmp_info_kvm(Monitor * mon,const QDict * qdict)14885ea9dfeSMarkus Armbruster void hmp_info_kvm(Monitor *mon, const QDict *qdict)
14985ea9dfeSMarkus Armbruster {
15085ea9dfeSMarkus Armbruster KvmInfo *info;
15185ea9dfeSMarkus Armbruster
15285ea9dfeSMarkus Armbruster info = qmp_query_kvm(NULL);
15385ea9dfeSMarkus Armbruster monitor_printf(mon, "kvm support: ");
15485ea9dfeSMarkus Armbruster if (info->present) {
15585ea9dfeSMarkus Armbruster monitor_printf(mon, "%s\n", info->enabled ? "enabled" : "disabled");
15685ea9dfeSMarkus Armbruster } else {
15785ea9dfeSMarkus Armbruster monitor_printf(mon, "not compiled\n");
15885ea9dfeSMarkus Armbruster }
15985ea9dfeSMarkus Armbruster
16085ea9dfeSMarkus Armbruster qapi_free_KvmInfo(info);
16185ea9dfeSMarkus Armbruster }
16285ea9dfeSMarkus Armbruster
hmp_info_uuid(Monitor * mon,const QDict * qdict)16385ea9dfeSMarkus Armbruster void hmp_info_uuid(Monitor *mon, const QDict *qdict)
16485ea9dfeSMarkus Armbruster {
16585ea9dfeSMarkus Armbruster UuidInfo *info;
16685ea9dfeSMarkus Armbruster
16785ea9dfeSMarkus Armbruster info = qmp_query_uuid(NULL);
16885ea9dfeSMarkus Armbruster monitor_printf(mon, "%s\n", info->UUID);
16985ea9dfeSMarkus Armbruster qapi_free_UuidInfo(info);
17085ea9dfeSMarkus Armbruster }
17185ea9dfeSMarkus Armbruster
hmp_info_balloon(Monitor * mon,const QDict * qdict)17285ea9dfeSMarkus Armbruster void hmp_info_balloon(Monitor *mon, const QDict *qdict)
17385ea9dfeSMarkus Armbruster {
17485ea9dfeSMarkus Armbruster BalloonInfo *info;
17585ea9dfeSMarkus Armbruster Error *err = NULL;
17685ea9dfeSMarkus Armbruster
17785ea9dfeSMarkus Armbruster info = qmp_query_balloon(&err);
17885ea9dfeSMarkus Armbruster if (hmp_handle_error(mon, err)) {
17985ea9dfeSMarkus Armbruster return;
18085ea9dfeSMarkus Armbruster }
18185ea9dfeSMarkus Armbruster
18285ea9dfeSMarkus Armbruster monitor_printf(mon, "balloon: actual=%" PRId64 "\n", info->actual >> 20);
18385ea9dfeSMarkus Armbruster
18485ea9dfeSMarkus Armbruster qapi_free_BalloonInfo(info);
18585ea9dfeSMarkus Armbruster }
18685ea9dfeSMarkus Armbruster
hmp_system_reset(Monitor * mon,const QDict * qdict)18785ea9dfeSMarkus Armbruster void hmp_system_reset(Monitor *mon, const QDict *qdict)
18885ea9dfeSMarkus Armbruster {
18985ea9dfeSMarkus Armbruster qmp_system_reset(NULL);
19085ea9dfeSMarkus Armbruster }
19185ea9dfeSMarkus Armbruster
hmp_system_powerdown(Monitor * mon,const QDict * qdict)19285ea9dfeSMarkus Armbruster void hmp_system_powerdown(Monitor *mon, const QDict *qdict)
19385ea9dfeSMarkus Armbruster {
19485ea9dfeSMarkus Armbruster qmp_system_powerdown(NULL);
19585ea9dfeSMarkus Armbruster }
19685ea9dfeSMarkus Armbruster
hmp_memsave(Monitor * mon,const QDict * qdict)19785ea9dfeSMarkus Armbruster void hmp_memsave(Monitor *mon, const QDict *qdict)
19885ea9dfeSMarkus Armbruster {
19985ea9dfeSMarkus Armbruster uint32_t size = qdict_get_int(qdict, "size");
20085ea9dfeSMarkus Armbruster const char *filename = qdict_get_str(qdict, "filename");
20185ea9dfeSMarkus Armbruster uint64_t addr = qdict_get_int(qdict, "val");
20285ea9dfeSMarkus Armbruster Error *err = NULL;
20385ea9dfeSMarkus Armbruster int cpu_index = monitor_get_cpu_index(mon);
20485ea9dfeSMarkus Armbruster
20585ea9dfeSMarkus Armbruster if (cpu_index < 0) {
20685ea9dfeSMarkus Armbruster monitor_printf(mon, "No CPU available\n");
20785ea9dfeSMarkus Armbruster return;
20885ea9dfeSMarkus Armbruster }
20985ea9dfeSMarkus Armbruster
21085ea9dfeSMarkus Armbruster qmp_memsave(addr, size, filename, true, cpu_index, &err);
21185ea9dfeSMarkus Armbruster hmp_handle_error(mon, err);
21285ea9dfeSMarkus Armbruster }
21385ea9dfeSMarkus Armbruster
hmp_pmemsave(Monitor * mon,const QDict * qdict)21485ea9dfeSMarkus Armbruster void hmp_pmemsave(Monitor *mon, const QDict *qdict)
21585ea9dfeSMarkus Armbruster {
21685ea9dfeSMarkus Armbruster uint32_t size = qdict_get_int(qdict, "size");
21785ea9dfeSMarkus Armbruster const char *filename = qdict_get_str(qdict, "filename");
21885ea9dfeSMarkus Armbruster uint64_t addr = qdict_get_int(qdict, "val");
21985ea9dfeSMarkus Armbruster Error *err = NULL;
22085ea9dfeSMarkus Armbruster
22185ea9dfeSMarkus Armbruster qmp_pmemsave(addr, size, filename, &err);
22285ea9dfeSMarkus Armbruster hmp_handle_error(mon, err);
22385ea9dfeSMarkus Armbruster }
22485ea9dfeSMarkus Armbruster
hmp_system_wakeup(Monitor * mon,const QDict * qdict)22585ea9dfeSMarkus Armbruster void hmp_system_wakeup(Monitor *mon, const QDict *qdict)
22685ea9dfeSMarkus Armbruster {
22785ea9dfeSMarkus Armbruster Error *err = NULL;
22885ea9dfeSMarkus Armbruster
22985ea9dfeSMarkus Armbruster qmp_system_wakeup(&err);
23085ea9dfeSMarkus Armbruster hmp_handle_error(mon, err);
23185ea9dfeSMarkus Armbruster }
23285ea9dfeSMarkus Armbruster
hmp_nmi(Monitor * mon,const QDict * qdict)23385ea9dfeSMarkus Armbruster void hmp_nmi(Monitor *mon, const QDict *qdict)
23485ea9dfeSMarkus Armbruster {
23585ea9dfeSMarkus Armbruster Error *err = NULL;
23685ea9dfeSMarkus Armbruster
23785ea9dfeSMarkus Armbruster qmp_inject_nmi(&err);
23885ea9dfeSMarkus Armbruster hmp_handle_error(mon, err);
23985ea9dfeSMarkus Armbruster }
24085ea9dfeSMarkus Armbruster
hmp_balloon(Monitor * mon,const QDict * qdict)24185ea9dfeSMarkus Armbruster void hmp_balloon(Monitor *mon, const QDict *qdict)
24285ea9dfeSMarkus Armbruster {
24385ea9dfeSMarkus Armbruster int64_t value = qdict_get_int(qdict, "value");
24485ea9dfeSMarkus Armbruster Error *err = NULL;
24585ea9dfeSMarkus Armbruster
24685ea9dfeSMarkus Armbruster qmp_balloon(value, &err);
24785ea9dfeSMarkus Armbruster hmp_handle_error(mon, err);
24885ea9dfeSMarkus Armbruster }
24985ea9dfeSMarkus Armbruster
hmp_info_memory_devices(Monitor * mon,const QDict * qdict)25085ea9dfeSMarkus Armbruster void hmp_info_memory_devices(Monitor *mon, const QDict *qdict)
25185ea9dfeSMarkus Armbruster {
25285ea9dfeSMarkus Armbruster Error *err = NULL;
25385ea9dfeSMarkus Armbruster MemoryDeviceInfoList *info_list = qmp_query_memory_devices(&err);
25485ea9dfeSMarkus Armbruster MemoryDeviceInfoList *info;
25585ea9dfeSMarkus Armbruster VirtioPMEMDeviceInfo *vpi;
25685ea9dfeSMarkus Armbruster VirtioMEMDeviceInfo *vmi;
25785ea9dfeSMarkus Armbruster MemoryDeviceInfo *value;
25885ea9dfeSMarkus Armbruster PCDIMMDeviceInfo *di;
25985ea9dfeSMarkus Armbruster SgxEPCDeviceInfo *se;
26016dff2f9SMaciej S. Szmigiero HvBalloonDeviceInfo *hi;
26185ea9dfeSMarkus Armbruster
26285ea9dfeSMarkus Armbruster for (info = info_list; info; info = info->next) {
26385ea9dfeSMarkus Armbruster value = info->value;
26485ea9dfeSMarkus Armbruster
26585ea9dfeSMarkus Armbruster if (value) {
26685ea9dfeSMarkus Armbruster switch (value->type) {
26785ea9dfeSMarkus Armbruster case MEMORY_DEVICE_INFO_KIND_DIMM:
26885ea9dfeSMarkus Armbruster case MEMORY_DEVICE_INFO_KIND_NVDIMM:
26985ea9dfeSMarkus Armbruster di = value->type == MEMORY_DEVICE_INFO_KIND_DIMM ?
27085ea9dfeSMarkus Armbruster value->u.dimm.data : value->u.nvdimm.data;
27185ea9dfeSMarkus Armbruster monitor_printf(mon, "Memory device [%s]: \"%s\"\n",
27285ea9dfeSMarkus Armbruster MemoryDeviceInfoKind_str(value->type),
27385ea9dfeSMarkus Armbruster di->id ? di->id : "");
27485ea9dfeSMarkus Armbruster monitor_printf(mon, " addr: 0x%" PRIx64 "\n", di->addr);
27585ea9dfeSMarkus Armbruster monitor_printf(mon, " slot: %" PRId64 "\n", di->slot);
27685ea9dfeSMarkus Armbruster monitor_printf(mon, " node: %" PRId64 "\n", di->node);
27785ea9dfeSMarkus Armbruster monitor_printf(mon, " size: %" PRIu64 "\n", di->size);
27885ea9dfeSMarkus Armbruster monitor_printf(mon, " memdev: %s\n", di->memdev);
27985ea9dfeSMarkus Armbruster monitor_printf(mon, " hotplugged: %s\n",
28085ea9dfeSMarkus Armbruster di->hotplugged ? "true" : "false");
28185ea9dfeSMarkus Armbruster monitor_printf(mon, " hotpluggable: %s\n",
28285ea9dfeSMarkus Armbruster di->hotpluggable ? "true" : "false");
28385ea9dfeSMarkus Armbruster break;
28485ea9dfeSMarkus Armbruster case MEMORY_DEVICE_INFO_KIND_VIRTIO_PMEM:
28585ea9dfeSMarkus Armbruster vpi = value->u.virtio_pmem.data;
28685ea9dfeSMarkus Armbruster monitor_printf(mon, "Memory device [%s]: \"%s\"\n",
28785ea9dfeSMarkus Armbruster MemoryDeviceInfoKind_str(value->type),
28885ea9dfeSMarkus Armbruster vpi->id ? vpi->id : "");
28985ea9dfeSMarkus Armbruster monitor_printf(mon, " memaddr: 0x%" PRIx64 "\n", vpi->memaddr);
29085ea9dfeSMarkus Armbruster monitor_printf(mon, " size: %" PRIu64 "\n", vpi->size);
29185ea9dfeSMarkus Armbruster monitor_printf(mon, " memdev: %s\n", vpi->memdev);
29285ea9dfeSMarkus Armbruster break;
29385ea9dfeSMarkus Armbruster case MEMORY_DEVICE_INFO_KIND_VIRTIO_MEM:
29485ea9dfeSMarkus Armbruster vmi = value->u.virtio_mem.data;
29585ea9dfeSMarkus Armbruster monitor_printf(mon, "Memory device [%s]: \"%s\"\n",
29685ea9dfeSMarkus Armbruster MemoryDeviceInfoKind_str(value->type),
29785ea9dfeSMarkus Armbruster vmi->id ? vmi->id : "");
29885ea9dfeSMarkus Armbruster monitor_printf(mon, " memaddr: 0x%" PRIx64 "\n", vmi->memaddr);
29985ea9dfeSMarkus Armbruster monitor_printf(mon, " node: %" PRId64 "\n", vmi->node);
30085ea9dfeSMarkus Armbruster monitor_printf(mon, " requested-size: %" PRIu64 "\n",
30185ea9dfeSMarkus Armbruster vmi->requested_size);
30285ea9dfeSMarkus Armbruster monitor_printf(mon, " size: %" PRIu64 "\n", vmi->size);
30385ea9dfeSMarkus Armbruster monitor_printf(mon, " max-size: %" PRIu64 "\n", vmi->max_size);
30485ea9dfeSMarkus Armbruster monitor_printf(mon, " block-size: %" PRIu64 "\n",
30585ea9dfeSMarkus Armbruster vmi->block_size);
30685ea9dfeSMarkus Armbruster monitor_printf(mon, " memdev: %s\n", vmi->memdev);
30785ea9dfeSMarkus Armbruster break;
30885ea9dfeSMarkus Armbruster case MEMORY_DEVICE_INFO_KIND_SGX_EPC:
30985ea9dfeSMarkus Armbruster se = value->u.sgx_epc.data;
31085ea9dfeSMarkus Armbruster monitor_printf(mon, "Memory device [%s]: \"%s\"\n",
31185ea9dfeSMarkus Armbruster MemoryDeviceInfoKind_str(value->type),
31285ea9dfeSMarkus Armbruster se->id ? se->id : "");
31385ea9dfeSMarkus Armbruster monitor_printf(mon, " memaddr: 0x%" PRIx64 "\n", se->memaddr);
31485ea9dfeSMarkus Armbruster monitor_printf(mon, " size: %" PRIu64 "\n", se->size);
31585ea9dfeSMarkus Armbruster monitor_printf(mon, " node: %" PRId64 "\n", se->node);
31685ea9dfeSMarkus Armbruster monitor_printf(mon, " memdev: %s\n", se->memdev);
31785ea9dfeSMarkus Armbruster break;
31816dff2f9SMaciej S. Szmigiero case MEMORY_DEVICE_INFO_KIND_HV_BALLOON:
31916dff2f9SMaciej S. Szmigiero hi = value->u.hv_balloon.data;
32016dff2f9SMaciej S. Szmigiero monitor_printf(mon, "Memory device [%s]: \"%s\"\n",
32116dff2f9SMaciej S. Szmigiero MemoryDeviceInfoKind_str(value->type),
32216dff2f9SMaciej S. Szmigiero hi->id ? hi->id : "");
32316dff2f9SMaciej S. Szmigiero if (hi->has_memaddr) {
32416dff2f9SMaciej S. Szmigiero monitor_printf(mon, " memaddr: 0x%" PRIx64 "\n",
32516dff2f9SMaciej S. Szmigiero hi->memaddr);
32616dff2f9SMaciej S. Szmigiero }
32716dff2f9SMaciej S. Szmigiero monitor_printf(mon, " max-size: %" PRIu64 "\n", hi->max_size);
32816dff2f9SMaciej S. Szmigiero if (hi->memdev) {
32916dff2f9SMaciej S. Szmigiero monitor_printf(mon, " memdev: %s\n", hi->memdev);
33016dff2f9SMaciej S. Szmigiero }
33116dff2f9SMaciej S. Szmigiero break;
33285ea9dfeSMarkus Armbruster default:
33385ea9dfeSMarkus Armbruster g_assert_not_reached();
33485ea9dfeSMarkus Armbruster }
33585ea9dfeSMarkus Armbruster }
33685ea9dfeSMarkus Armbruster }
33785ea9dfeSMarkus Armbruster
33885ea9dfeSMarkus Armbruster qapi_free_MemoryDeviceInfoList(info_list);
33985ea9dfeSMarkus Armbruster hmp_handle_error(mon, err);
34085ea9dfeSMarkus Armbruster }
34185ea9dfeSMarkus Armbruster
hmp_info_vm_generation_id(Monitor * mon,const QDict * qdict)34285ea9dfeSMarkus Armbruster void hmp_info_vm_generation_id(Monitor *mon, const QDict *qdict)
34385ea9dfeSMarkus Armbruster {
34485ea9dfeSMarkus Armbruster Error *err = NULL;
34585ea9dfeSMarkus Armbruster GuidInfo *info = qmp_query_vm_generation_id(&err);
34685ea9dfeSMarkus Armbruster if (info) {
34785ea9dfeSMarkus Armbruster monitor_printf(mon, "%s\n", info->guid);
34885ea9dfeSMarkus Armbruster }
34985ea9dfeSMarkus Armbruster hmp_handle_error(mon, err);
35085ea9dfeSMarkus Armbruster qapi_free_GuidInfo(info);
35185ea9dfeSMarkus Armbruster }
35285ea9dfeSMarkus Armbruster
hmp_info_memory_size_summary(Monitor * mon,const QDict * qdict)35385ea9dfeSMarkus Armbruster void hmp_info_memory_size_summary(Monitor *mon, const QDict *qdict)
35485ea9dfeSMarkus Armbruster {
35585ea9dfeSMarkus Armbruster Error *err = NULL;
35685ea9dfeSMarkus Armbruster MemoryInfo *info = qmp_query_memory_size_summary(&err);
35785ea9dfeSMarkus Armbruster if (info) {
35885ea9dfeSMarkus Armbruster monitor_printf(mon, "base memory: %" PRIu64 "\n",
35985ea9dfeSMarkus Armbruster info->base_memory);
36085ea9dfeSMarkus Armbruster
36185ea9dfeSMarkus Armbruster if (info->has_plugged_memory) {
36285ea9dfeSMarkus Armbruster monitor_printf(mon, "plugged memory: %" PRIu64 "\n",
36385ea9dfeSMarkus Armbruster info->plugged_memory);
36485ea9dfeSMarkus Armbruster }
36585ea9dfeSMarkus Armbruster
36685ea9dfeSMarkus Armbruster qapi_free_MemoryInfo(info);
36785ea9dfeSMarkus Armbruster }
36885ea9dfeSMarkus Armbruster hmp_handle_error(mon, err);
36985ea9dfeSMarkus Armbruster }
370