mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:10 +00:00
qapi, hmp: introspection for the sp-mem device
Add a SpMemDeviceInfo variant to MemoryDeviceInfo so `query-memory-devices` reports each sp-mem instance (id, addr, size, node, memdev), and print it from HMP `info memory-devices`. Signed-off-by: FangSheng Huang <FangSheng.Huang@amd.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: David Hildenbrand (Arm) <david@kernel.org> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Message-ID: <20260623075051.3797975-3-FangSheng.Huang@amd.com>
This commit is contained in:
committed by
Michael S. Tsirkin
parent
e83b010836
commit
839c0a2bd8
@@ -279,6 +279,7 @@ void hmp_info_memory_devices(Monitor *mon, const QDict *qdict)
|
||||
PCDIMMDeviceInfo *di;
|
||||
SgxEPCDeviceInfo *se;
|
||||
HvBalloonDeviceInfo *hi;
|
||||
SpMemDeviceInfo *spmi;
|
||||
|
||||
for (info = info_list; info; info = info->next) {
|
||||
value = info->value;
|
||||
@@ -350,6 +351,16 @@ void hmp_info_memory_devices(Monitor *mon, const QDict *qdict)
|
||||
monitor_printf(mon, " memdev: %s\n", hi->memdev);
|
||||
}
|
||||
break;
|
||||
case MEMORY_DEVICE_INFO_KIND_SP_MEM:
|
||||
spmi = value->u.sp_mem.data;
|
||||
monitor_printf(mon, "Memory device [%s]: \"%s\"\n",
|
||||
MemoryDeviceInfoKind_str(value->type),
|
||||
spmi->id ? spmi->id : "");
|
||||
monitor_printf(mon, " addr: 0x%" PRIx64 "\n", spmi->addr);
|
||||
monitor_printf(mon, " node: %" PRId64 "\n", spmi->node);
|
||||
monitor_printf(mon, " size: %" PRIu64 "\n", spmi->size);
|
||||
monitor_printf(mon, " memdev: %s\n", spmi->memdev);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
@@ -53,6 +53,24 @@ static MemoryRegion *sp_mem_get_memory_region(MemoryDeviceState *md,
|
||||
return host_memory_backend_get_memory(spm->hostmem);
|
||||
}
|
||||
|
||||
static void sp_mem_fill_device_info(const MemoryDeviceState *md,
|
||||
MemoryDeviceInfo *info)
|
||||
{
|
||||
SpMemDeviceInfo *di = g_new0(SpMemDeviceInfo, 1);
|
||||
SpMemDevice *spm = SP_MEM(md);
|
||||
DeviceState *dev = DEVICE(md);
|
||||
|
||||
di->id = dev->id ? g_strdup(dev->id) : NULL;
|
||||
di->addr = spm->addr;
|
||||
di->size = memory_region_size(
|
||||
host_memory_backend_get_memory(spm->hostmem));
|
||||
di->node = spm->node;
|
||||
di->memdev = object_get_canonical_path(OBJECT(spm->hostmem));
|
||||
|
||||
info->u.sp_mem.data = di;
|
||||
info->type = MEMORY_DEVICE_INFO_KIND_SP_MEM;
|
||||
}
|
||||
|
||||
static void sp_mem_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
SpMemDevice *spm = SP_MEM(dev);
|
||||
@@ -91,6 +109,7 @@ static void sp_mem_class_init(ObjectClass *oc, const void *data)
|
||||
mdc->set_addr = sp_mem_set_addr;
|
||||
mdc->get_memory_region = sp_mem_get_memory_region;
|
||||
mdc->get_plugged_size = memory_device_get_region_size;
|
||||
mdc->fill_device_info = sp_mem_fill_device_info;
|
||||
}
|
||||
|
||||
static const TypeInfo sp_mem_types[] = {
|
||||
|
||||
@@ -1413,6 +1413,32 @@
|
||||
}
|
||||
}
|
||||
|
||||
##
|
||||
# @SpMemDeviceInfo:
|
||||
#
|
||||
# sp-mem device state information
|
||||
#
|
||||
# @id: device's ID
|
||||
#
|
||||
# @addr: physical address, where device is mapped
|
||||
#
|
||||
# @size: size of memory that the device provides, in bytes
|
||||
#
|
||||
# @node: NUMA proximity domain to which the device is assigned
|
||||
#
|
||||
# @memdev: memory backend linked with device
|
||||
#
|
||||
# Since: 11.1
|
||||
##
|
||||
{ 'struct': 'SpMemDeviceInfo',
|
||||
'data': { '*id': 'str',
|
||||
'addr': 'size',
|
||||
'size': 'size',
|
||||
'node': 'int',
|
||||
'memdev': 'str'
|
||||
}
|
||||
}
|
||||
|
||||
##
|
||||
# @MemoryDeviceInfoKind:
|
||||
#
|
||||
@@ -1426,11 +1452,13 @@
|
||||
#
|
||||
# @hv-balloon: since 8.2.
|
||||
#
|
||||
# @sp-mem: since 11.1.
|
||||
#
|
||||
# Since: 2.1
|
||||
##
|
||||
{ 'enum': 'MemoryDeviceInfoKind',
|
||||
'data': [ 'dimm', 'nvdimm', 'virtio-pmem', 'virtio-mem', 'sgx-epc',
|
||||
'hv-balloon' ] }
|
||||
'hv-balloon', 'sp-mem' ] }
|
||||
|
||||
##
|
||||
# @PCDIMMDeviceInfoWrapper:
|
||||
@@ -1482,6 +1510,16 @@
|
||||
{ 'struct': 'HvBalloonDeviceInfoWrapper',
|
||||
'data': { 'data': 'HvBalloonDeviceInfo' } }
|
||||
|
||||
##
|
||||
# @SpMemDeviceInfoWrapper:
|
||||
#
|
||||
# @data: sp-mem device state information
|
||||
#
|
||||
# Since: 11.1
|
||||
##
|
||||
{ 'struct': 'SpMemDeviceInfoWrapper',
|
||||
'data': { 'data': 'SpMemDeviceInfo' } }
|
||||
|
||||
##
|
||||
# @MemoryDeviceInfo:
|
||||
#
|
||||
@@ -1499,7 +1537,8 @@
|
||||
'virtio-pmem': 'VirtioPMEMDeviceInfoWrapper',
|
||||
'virtio-mem': 'VirtioMEMDeviceInfoWrapper',
|
||||
'sgx-epc': 'SgxEPCDeviceInfoWrapper',
|
||||
'hv-balloon': 'HvBalloonDeviceInfoWrapper'
|
||||
'hv-balloon': 'HvBalloonDeviceInfoWrapper',
|
||||
'sp-mem': 'SpMemDeviceInfoWrapper'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user