xref: /qemu/hw/core/machine-hmp-cmds.c (revision 989bb312)
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         }
90989bb312SZhao Liu         if (c->has_module_id) {
91989bb312SZhao Liu             monitor_printf(mon, "    module-id: \"%" PRIu64 "\"\n",
92989bb312SZhao Liu                            c->module_id);
93989bb312SZhao 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