[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 17/50] qmp: distinguish PC-DIMM and NVDIMM in Memo
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL v2 17/50] qmp: distinguish PC-DIMM and NVDIMM in MemoryDeviceInfoList |
Date: |
Tue, 20 Mar 2018 05:17:22 +0200 |
From: Haozhong Zhang <address@hidden>
It may need to treat PC-DIMM and NVDIMM differently, e.g., when
deciding the necessity of non-volatile flag bit in SRAT memory
affinity structures.
A new field 'nvdimm' is added to the union type MemoryDeviceInfo for
such purpose. Its type is currently PCDIMMDeviceInfo and will be
updated when necessary in the future.
It also fixes "info memory-devices"/query-memory-devices which
currently show nvdimm devices as dimm devices since
object_dynamic_cast(obj, TYPE_PC_DIMM) happily cast nvdimm to
TYPE_PC_DIMM which it's been inherited from.
Signed-off-by: Haozhong Zhang <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Igor Mammedov <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
qapi/misc.json | 6 +++++-
hmp.c | 14 +++++++++++---
hw/mem/pc-dimm.c | 10 +++++++++-
numa.c | 19 +++++++++++++------
4 files changed, 38 insertions(+), 11 deletions(-)
diff --git a/qapi/misc.json b/qapi/misc.json
index bcd5d10..6bf082f 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -2852,7 +2852,11 @@
#
# Since: 2.1
##
-{ 'union': 'MemoryDeviceInfo', 'data': {'dimm': 'PCDIMMDeviceInfo'} }
+{ 'union': 'MemoryDeviceInfo',
+ 'data': { 'dimm': 'PCDIMMDeviceInfo',
+ 'nvdimm': 'PCDIMMDeviceInfo'
+ }
+}
##
# @query-memory-devices:
diff --git a/hmp.c b/hmp.c
index ba9e299..a277517 100644
--- a/hmp.c
+++ b/hmp.c
@@ -2423,7 +2423,18 @@ void hmp_info_memory_devices(Monitor *mon, const QDict
*qdict)
switch (value->type) {
case MEMORY_DEVICE_INFO_KIND_DIMM:
di = value->u.dimm.data;
+ break;
+
+ case MEMORY_DEVICE_INFO_KIND_NVDIMM:
+ di = value->u.nvdimm.data;
+ break;
+
+ default:
+ di = NULL;
+ break;
+ }
+ if (di) {
monitor_printf(mon, "Memory device [%s]: \"%s\"\n",
MemoryDeviceInfoKind_str(value->type),
di->id ? di->id : "");
@@ -2436,9 +2447,6 @@ void hmp_info_memory_devices(Monitor *mon, const QDict
*qdict)
di->hotplugged ? "true" : "false");
monitor_printf(mon, " hotpluggable: %s\n",
di->hotpluggable ? "true" : "false");
- break;
- default:
- break;
}
}
}
diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c
index 4d050fe..51350d9 100644
--- a/hw/mem/pc-dimm.c
+++ b/hw/mem/pc-dimm.c
@@ -20,6 +20,7 @@
#include "qemu/osdep.h"
#include "hw/mem/pc-dimm.h"
+#include "hw/mem/nvdimm.h"
#include "qapi/error.h"
#include "qemu/config-file.h"
#include "qapi/visitor.h"
@@ -250,6 +251,7 @@ MemoryDeviceInfoList *qmp_pc_dimm_device_list(void)
MemoryDeviceInfoList *elem = g_new0(MemoryDeviceInfoList, 1);
MemoryDeviceInfo *info = g_new0(MemoryDeviceInfo, 1);
PCDIMMDeviceInfo *di = g_new0(PCDIMMDeviceInfo, 1);
+ bool is_nvdimm = object_dynamic_cast(obj, TYPE_NVDIMM);
DeviceClass *dc = DEVICE_GET_CLASS(obj);
DeviceState *dev = DEVICE(obj);
@@ -265,7 +267,13 @@ MemoryDeviceInfoList *qmp_pc_dimm_device_list(void)
di->size = object_property_get_uint(obj, PC_DIMM_SIZE_PROP, NULL);
di->memdev = object_get_canonical_path(OBJECT(dimm->hostmem));
- info->u.dimm.data = di;
+ if (!is_nvdimm) {
+ info->u.dimm.data = di;
+ info->type = MEMORY_DEVICE_INFO_KIND_DIMM;
+ } else {
+ info->u.nvdimm.data = di;
+ info->type = MEMORY_DEVICE_INFO_KIND_NVDIMM;
+ }
elem->value = info;
elem->next = NULL;
if (prev) {
diff --git a/numa.c b/numa.c
index 9442704..1116c90 100644
--- a/numa.c
+++ b/numa.c
@@ -529,18 +529,25 @@ static void numa_stat_memory_devices(NumaNodeMem
node_mem[])
if (value) {
switch (value->type) {
- case MEMORY_DEVICE_INFO_KIND_DIMM: {
+ case MEMORY_DEVICE_INFO_KIND_DIMM:
pcdimm_info = value->u.dimm.data;
+ break;
+
+ case MEMORY_DEVICE_INFO_KIND_NVDIMM:
+ pcdimm_info = value->u.nvdimm.data;
+ break;
+
+ default:
+ pcdimm_info = NULL;
+ break;
+ }
+
+ if (pcdimm_info) {
node_mem[pcdimm_info->node].node_mem += pcdimm_info->size;
if (pcdimm_info->hotpluggable && pcdimm_info->hotplugged) {
node_mem[pcdimm_info->node].node_plugged_mem +=
pcdimm_info->size;
}
- break;
- }
-
- default:
- break;
}
}
}
--
MST
- [Qemu-devel] [PULL v2 08/50] acpi: move ACPI_PORT_SMI_CMD define to header it belongs to, (continued)
- [Qemu-devel] [PULL v2 08/50] acpi: move ACPI_PORT_SMI_CMD define to header it belongs to, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 01/50] scripts/update-linux-headers: add ethtool.h and update to 4.16.0-rc4, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 09/50] pc: acpi: isolate FADT specific data into AcpiFadtData structure, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 10/50] pc: acpi: use build_append_foo() API to construct FADT, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 15/50] hw/pci: remove obsolete PCIDevice->init(), Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 13/50] tests: acpi: don't read all fields in test_acpi_fadt_table(), Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 14/50] standard-headers: update virtio_net.h, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 16/50] pc-dimm: make qmp_pc_dimm_device_list() sort devices by address, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 19/50] tests/bios-tables-test: add test cases for DIMM proximity, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 18/50] hw/acpi-build: build SRAT memory affinity structures for DIMM devices, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 17/50] qmp: distinguish PC-DIMM and NVDIMM in MemoryDeviceInfoList,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL v2 12/50] virt_arm: acpi: reuse common build_fadt(), Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 11/50] acpi: move build_fadt() from i386 specific to generic ACPI source, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 20/50] test/acpi-test-data: add ACPI tables for dimmpxm test, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 21/50] Makefile: add target to print generated files, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 22/50] migrate: Update ram_block_discard_range for shared, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 23/50] qemu_ram_block_host_offset, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 26/50] postcopy: Add vhost-user flag for postcopy and check it, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 24/50] postcopy: use UFFDIO_ZEROPAGE only when available, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 25/50] postcopy: Add notifier chain, Michael S. Tsirkin, 2018/03/19
- [Qemu-devel] [PULL v2 27/50] vhost-user: Add 'VHOST_USER_POSTCOPY_ADVISE' message, Michael S. Tsirkin, 2018/03/19