qapi: Add query-memory-devices support to hv-balloon
Used by the driver to report its provided memory state information. Co-developed-by: David Hildenbrand <david@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Acked-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
This commit is contained in:
parent
99a4706ae8
commit
16dff2f9bb
@ -253,6 +253,7 @@ void hmp_info_memory_devices(Monitor *mon, const QDict *qdict)
|
||||
MemoryDeviceInfo *value;
|
||||
PCDIMMDeviceInfo *di;
|
||||
SgxEPCDeviceInfo *se;
|
||||
HvBalloonDeviceInfo *hi;
|
||||
|
||||
for (info = info_list; info; info = info->next) {
|
||||
value = info->value;
|
||||
@ -310,6 +311,20 @@ void hmp_info_memory_devices(Monitor *mon, const QDict *qdict)
|
||||
monitor_printf(mon, " node: %" PRId64 "\n", se->node);
|
||||
monitor_printf(mon, " memdev: %s\n", se->memdev);
|
||||
break;
|
||||
case MEMORY_DEVICE_INFO_KIND_HV_BALLOON:
|
||||
hi = value->u.hv_balloon.data;
|
||||
monitor_printf(mon, "Memory device [%s]: \"%s\"\n",
|
||||
MemoryDeviceInfoKind_str(value->type),
|
||||
hi->id ? hi->id : "");
|
||||
if (hi->has_memaddr) {
|
||||
monitor_printf(mon, " memaddr: 0x%" PRIx64 "\n",
|
||||
hi->memaddr);
|
||||
}
|
||||
monitor_printf(mon, " max-size: %" PRIu64 "\n", hi->max_size);
|
||||
if (hi->memdev) {
|
||||
monitor_printf(mon, " memdev: %s\n", hi->memdev);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
@ -1625,6 +1625,31 @@ static MemoryRegion *hv_balloon_md_get_memory_region(MemoryDeviceState *md,
|
||||
return balloon->mr;
|
||||
}
|
||||
|
||||
static void hv_balloon_md_fill_device_info(const MemoryDeviceState *md,
|
||||
MemoryDeviceInfo *info)
|
||||
{
|
||||
HvBalloonDeviceInfo *hi = g_new0(HvBalloonDeviceInfo, 1);
|
||||
const HvBalloon *balloon = HV_BALLOON(md);
|
||||
DeviceState *dev = DEVICE(md);
|
||||
|
||||
if (dev->id) {
|
||||
hi->id = g_strdup(dev->id);
|
||||
}
|
||||
|
||||
if (balloon->hostmem) {
|
||||
hi->memdev = object_get_canonical_path(OBJECT(balloon->hostmem));
|
||||
hi->memaddr = balloon->addr;
|
||||
hi->has_memaddr = true;
|
||||
hi->max_size = memory_region_size(balloon->mr);
|
||||
/* TODO: expose current provided size or something else? */
|
||||
} else {
|
||||
hi->max_size = 0;
|
||||
}
|
||||
|
||||
info->u.hv_balloon.data = hi;
|
||||
info->type = MEMORY_DEVICE_INFO_KIND_HV_BALLOON;
|
||||
}
|
||||
|
||||
static void hv_balloon_decide_memslots(MemoryDeviceState *md,
|
||||
unsigned int limit)
|
||||
{
|
||||
@ -1712,5 +1737,5 @@ static void hv_balloon_class_init(ObjectClass *klass, void *data)
|
||||
mdc->get_memory_region = hv_balloon_md_get_memory_region;
|
||||
mdc->decide_memslots = hv_balloon_decide_memslots;
|
||||
mdc->get_memslots = hv_balloon_get_memslots;
|
||||
/* implement fill_device_info */
|
||||
mdc->fill_device_info = hv_balloon_md_fill_device_info;
|
||||
}
|
||||
|
@ -1289,6 +1289,29 @@
|
||||
}
|
||||
}
|
||||
|
||||
##
|
||||
# @HvBalloonDeviceInfo:
|
||||
#
|
||||
# hv-balloon provided memory state information
|
||||
#
|
||||
# @id: device's ID
|
||||
#
|
||||
# @memaddr: physical address in memory, where device is mapped
|
||||
#
|
||||
# @max-size: the maximum size of memory that the device can provide
|
||||
#
|
||||
# @memdev: memory backend linked with device
|
||||
#
|
||||
# Since: 8.2
|
||||
##
|
||||
{ 'struct': 'HvBalloonDeviceInfo',
|
||||
'data': { '*id': 'str',
|
||||
'*memaddr': 'size',
|
||||
'max-size': 'size',
|
||||
'*memdev': 'str'
|
||||
}
|
||||
}
|
||||
|
||||
##
|
||||
# @MemoryDeviceInfoKind:
|
||||
#
|
||||
@ -1300,10 +1323,13 @@
|
||||
#
|
||||
# @sgx-epc: since 6.2.
|
||||
#
|
||||
# @hv-balloon: since 8.2.
|
||||
#
|
||||
# Since: 2.1
|
||||
##
|
||||
{ 'enum': 'MemoryDeviceInfoKind',
|
||||
'data': [ 'dimm', 'nvdimm', 'virtio-pmem', 'virtio-mem', 'sgx-epc' ] }
|
||||
'data': [ 'dimm', 'nvdimm', 'virtio-pmem', 'virtio-mem', 'sgx-epc',
|
||||
'hv-balloon' ] }
|
||||
|
||||
##
|
||||
# @PCDIMMDeviceInfoWrapper:
|
||||
@ -1337,6 +1363,14 @@
|
||||
{ 'struct': 'SgxEPCDeviceInfoWrapper',
|
||||
'data': { 'data': 'SgxEPCDeviceInfo' } }
|
||||
|
||||
##
|
||||
# @HvBalloonDeviceInfoWrapper:
|
||||
#
|
||||
# Since: 8.2
|
||||
##
|
||||
{ 'struct': 'HvBalloonDeviceInfoWrapper',
|
||||
'data': { 'data': 'HvBalloonDeviceInfo' } }
|
||||
|
||||
##
|
||||
# @MemoryDeviceInfo:
|
||||
#
|
||||
@ -1351,7 +1385,8 @@
|
||||
'nvdimm': 'PCDIMMDeviceInfoWrapper',
|
||||
'virtio-pmem': 'VirtioPMEMDeviceInfoWrapper',
|
||||
'virtio-mem': 'VirtioMEMDeviceInfoWrapper',
|
||||
'sgx-epc': 'SgxEPCDeviceInfoWrapper'
|
||||
'sgx-epc': 'SgxEPCDeviceInfoWrapper',
|
||||
'hv-balloon': 'HvBalloonDeviceInfoWrapper'
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user