From: Haozhong Zhang <haozhong.zhang@intel.com>
To: qemu-devel@nongnu.org, xen-devel@lists.xensource.com
Cc: Haozhong Zhang <haozhong.zhang@intel.com>,
Xiao Guangrong <guangrong.xiao@linux.intel.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
Igor Mammedov <imammedo@redhat.com>,
Eric Blake <eblake@redhat.com>
Subject: [RFC QEMU PATCH 8/8] qmp: add a qmp command 'query-nvdimms' to get plugged NVDIMM devices
Date: Mon, 10 Oct 2016 08:34:23 +0800 [thread overview]
Message-ID: <20161010003423.4333-9-haozhong.zhang@intel.com> (raw)
In-Reply-To: <20161010003423.4333-1-haozhong.zhang@intel.com>
Xen uses this command to get the backend resource, guest SPA and size of
NVDIMM devices so as to map them to guest.
Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
---
Cc: Markus Armbruster <armbru@redhat.com>
Cc: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Cc: Eric Blake <eblake@redhat.com>
---
docs/qmp-commands.txt | 36 ++++++++++++++++++++++++++++++++++++
hw/acpi/nvdimm.c | 2 +-
hw/mem/nvdimm.c | 35 +++++++++++++++++++++++++++++++++++
include/hw/mem/nvdimm.h | 10 ++++++++++
qapi-schema.json | 29 +++++++++++++++++++++++++++++
5 files changed, 111 insertions(+), 1 deletion(-)
diff --git a/docs/qmp-commands.txt b/docs/qmp-commands.txt
index e0adceb..90e9fb6 100644
--- a/docs/qmp-commands.txt
+++ b/docs/qmp-commands.txt
@@ -3800,3 +3800,39 @@ Example for pc machine type started with
"props": {"core-id": 0, "socket-id": 0, "thread-id": 0}
}
]}
+
+EQMP
+
+ {
+ .name = "query-nvdimms",
+ .args_type = "",
+ .mhandler.cmd_new = qmp_marshal_query_nvdimms,
+ },
+
+SQMP
+Show plugged NVDIMM devices
+---------------------------
+
+Arguments: None.
+
+Example for pc machine type started with
+-object memory-backend-file,id=mem1,mem-path=/path/to/nvm1,size=4G
+-device nvdimm,id=nvdimm1,memdev=mem1
+-object memory-backend-file,id=mem2,mem-path=/path/to/nvm2,size=8G
+-device nvdimm,id=nvdimm2,memdev=mem2:
+
+-> { "execute": "query-nvdimms" }
+<- { "returns": [
+ {
+ "mem-path": "/path/to/nvm1",
+ "slot": 0,
+ "spa": 17179869184,
+ "length": 4294967296
+ },
+ {
+ "mem-path": "/path/to/nvm2",
+ "slot": 1,
+ "spa": 21474836480,
+ "length": 8589934592
+ }
+ ]}
diff --git a/hw/acpi/nvdimm.c b/hw/acpi/nvdimm.c
index 4cfb94d..eedc128 100644
--- a/hw/acpi/nvdimm.c
+++ b/hw/acpi/nvdimm.c
@@ -57,7 +57,7 @@ static int nvdimm_plugged_device_list(Object *obj, void *opaque)
* Note: it is the caller's responsibility to free the list to avoid
* memory leak.
*/
-static GSList *nvdimm_get_plugged_device_list(void)
+GSList *nvdimm_get_plugged_device_list(void)
{
GSList *list = NULL;
diff --git a/hw/mem/nvdimm.c b/hw/mem/nvdimm.c
index d25993b..99d0cc9 100644
--- a/hw/mem/nvdimm.c
+++ b/hw/mem/nvdimm.c
@@ -26,6 +26,7 @@
#include "qapi/error.h"
#include "qapi/visitor.h"
#include "hw/mem/nvdimm.h"
+#include "qmp-commands.h"
static void nvdimm_get_label_size(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
@@ -180,3 +181,37 @@ static void nvdimm_register_types(void)
}
type_init(nvdimm_register_types)
+
+NvdimmInfoList *qmp_query_nvdimms(Error **errp)
+{
+ NvdimmInfoList *info_list = NULL;
+ NvdimmInfoList *info;
+ GSList *device_list = nvdimm_get_plugged_device_list();
+
+ while (device_list) {
+ DeviceState *dev = device_list->data;
+ PCDIMMDevice *parent = PC_DIMM(OBJECT(dev));
+ const char *mem_path;
+
+ info = g_new0(NvdimmInfoList, 1);
+ info->value = g_new0(NvdimmInfo, 1);
+
+ mem_path = object_property_get_str(OBJECT(parent->hostmem),
+ "mem-path", NULL);
+ info->value->mem_path = mem_path ? strdup(mem_path) : NULL;
+
+ info->value->slot = object_property_get_int(OBJECT(dev),
+ PC_DIMM_SLOT_PROP, NULL);
+ info->value->spa = object_property_get_int(OBJECT(dev),
+ PC_DIMM_ADDR_PROP, NULL);
+ info->value->length = object_property_get_int(OBJECT(dev),
+ PC_DIMM_SIZE_PROP, NULL);
+
+ info->next = info_list;
+ info_list = info;
+ device_list = device_list->next;
+ }
+
+ g_slist_free(device_list);
+ return info_list;
+}
diff --git a/include/hw/mem/nvdimm.h b/include/hw/mem/nvdimm.h
index 1cfe9e0..6be269e 100644
--- a/include/hw/mem/nvdimm.h
+++ b/include/hw/mem/nvdimm.h
@@ -113,4 +113,14 @@ void nvdimm_init_acpi_state(AcpiNVDIMMState *state, MemoryRegion *io,
FWCfgState *fw_cfg, Object *owner);
void nvdimm_build_acpi(GArray *table_offsets, GArray *table_data,
BIOSLinker *linker, GArray *dsm_dma_arrea);
+
+/*
+ * Inquire plugged NVDIMM devices and link them into the list which is
+ * returned to the caller.
+ *
+ * Note: it is the caller's responsibility to free the list to avoid
+ * memory leak.
+ */
+GSList *nvdimm_get_plugged_device_list(void);
+
#endif
diff --git a/qapi-schema.json b/qapi-schema.json
index c3dcf11..6246255 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -4646,3 +4646,32 @@
# Since: 2.7
##
{ 'command': 'query-hotpluggable-cpus', 'returns': ['HotpluggableCPU'] }
+
+##
+# @NvdimmInfo
+#
+# Information about an NVDIMM device.
+#
+# @mem-path: the backend file of the NVDIMM device
+#
+# @slot: the slot index of the NVDIMM device
+#
+# @spa: the 64-bit SPA base address of the NVDIMM device
+#
+# @length: the 64-bit size in bytes of the NVDIMM device
+#
+# Since 2.8
+##
+{ 'struct': 'NvdimmInfo',
+ 'data': {'mem-path' : 'str', 'slot': 'int', 'spa': 'int', 'length': 'int'} }
+
+##
+# @query-nvdimms:
+#
+# Returns information about each NVDIMM device
+#
+# Returns: a list of @NvdimmInfo for each device
+#
+# Since: 2.8
+##
+{ 'command': 'query-nvdimms', 'returns': ['NvdimmInfo'] }
--
2.10.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2016-10-10 0:34 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-10 0:34 [RFC QEMU PATCH 0/8] Implement vNVDIMM for Xen HVM guest Haozhong Zhang
2016-10-10 0:34 ` [RFC QEMU PATCH 1/8] nvdimm: do not initialize label_data if label_size is zero Haozhong Zhang
2017-02-15 22:18 ` Konrad Rzeszutek Wilk
2016-10-10 0:34 ` [RFC QEMU PATCH 2/8] xen-hvm: add a function to copy ACPI to guest Haozhong Zhang
2016-10-10 0:34 ` [RFC QEMU PATCH 3/8] nvdimm acpi: do not use fw_cfg on Xen Haozhong Zhang
2016-10-10 0:34 ` [RFC QEMU PATCH 4/8] nvdimm acpi: build and copy NFIT to guest " Haozhong Zhang
2016-10-10 0:34 ` [RFC QEMU PATCH 5/8] nvdimm acpi: build and copy NVDIMM namespace devices " Haozhong Zhang
2016-10-10 0:34 ` [RFC QEMU PATCH 6/8] hostmem: add a host memory backend for Xen Haozhong Zhang
2016-10-10 0:34 ` [RFC QEMU PATCH 7/8] xen-hvm: create hotplug memory region for HVM guest Haozhong Zhang
2016-10-10 0:34 ` Haozhong Zhang [this message]
2016-10-10 19:16 ` [RFC QEMU PATCH 8/8] qmp: add a qmp command 'query-nvdimms' to get plugged NVDIMM devices Eric Blake
2016-10-11 6:31 ` Haozhong Zhang
2016-10-11 8:22 ` Markus Armbruster
2016-10-11 10:12 ` Haozhong Zhang
2016-10-11 14:45 ` Eric Blake
2016-10-10 16:52 ` [RFC QEMU PATCH 0/8] Implement vNVDIMM for Xen HVM guest no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161010003423.4333-9-haozhong.zhang@intel.com \
--to=haozhong.zhang@intel.com \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=guangrong.xiao@linux.intel.com \
--cc=imammedo@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).