From: Haozhong Zhang <haozhong.zhang@intel.com>
To: qemu-devel@nongnu.org
Cc: Haozhong Zhang <haozhong.zhang@intel.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Igor Mammedov <imammedo@redhat.com>,
Xiao Guangrong <guangrong.xiao@gmail.com>,
Stefan Hajnoczi <stefanha@gmail.com>,
Dan Williams <dan.j.williams@intel.com>
Subject: [Qemu-devel] [RESEND PATCH 1/2] nvdimm: warn if the backend is not a DAX device
Date: Fri, 26 May 2017 10:32:12 +0800 [thread overview]
Message-ID: <20170526023213.18741-1-haozhong.zhang@intel.com> (raw)
Applications in Linux guest that use device-dax never trigger flush
that can be trapped by KVM/QEMU. Meanwhile, if the host backend is not
device-dax, QEMU cannot guarantee the persistence of guest writes.
Before solving this flushing problem, QEMU should warn users if the
host backend is not device-dax.
Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Message-id: CAPcyv4hV2-ZW8SMCRtD0P_86KgR3DHOvNe+6T5SY2u7wXg3gEg@mail.gmail.com
---
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Cc: Xiao Guangrong <guangrong.xiao@gmail.com>
Cc: Stefan Hajnoczi <stefanha@gmail.com>
Cc: Dan Williams <dan.j.williams@intel.com>
---
Resend because the wrong maintainer email address was used.
---
hw/mem/nvdimm.c | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/hw/mem/nvdimm.c b/hw/mem/nvdimm.c
index db896b0bb6..c7bb407f33 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 "qemu/error-report.h"
static void nvdimm_get_label_size(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
@@ -78,12 +79,48 @@ static MemoryRegion *nvdimm_get_memory_region(PCDIMMDevice *dimm)
return &nvdimm->nvdimm_mr;
}
+static void nvdimm_check_dax(HostMemoryBackend *hostmem)
+{
+ char *mem_path =
+ object_property_get_str(OBJECT(hostmem), "mem-path", NULL);
+ char *dev_name = NULL, *sysfs_path = NULL;
+ bool is_dax = false;
+
+ if (!mem_path) {
+ goto out;
+ }
+
+ if (!g_str_has_prefix(mem_path, "/dev/dax")) {
+ goto out;
+ }
+
+ dev_name = mem_path + strlen("/dev/");
+ sysfs_path = g_strdup_printf("/sys/class/dax/%s", dev_name);
+ if (access(sysfs_path, F_OK)) {
+ goto out;
+ }
+
+ is_dax = true;
+
+ out:
+ if (!is_dax) {
+ error_report("warning: nvdimm backend %s is not DAX device, "
+ "unable to guarantee persistence of guest writes",
+ mem_path ?: "RAM");
+ }
+
+ g_free(sysfs_path);
+ g_free(mem_path);
+}
+
static void nvdimm_realize(PCDIMMDevice *dimm, Error **errp)
{
MemoryRegion *mr = host_memory_backend_get_memory(dimm->hostmem, errp);
NVDIMMDevice *nvdimm = NVDIMM(dimm);
uint64_t align, pmem_size, size = memory_region_size(mr);
+ nvdimm_check_dax(dimm->hostmem);
+
align = memory_region_get_alignment(mr);
pmem_size = size - nvdimm->label_size;
--
2.11.0
next reply other threads:[~2017-05-26 2:32 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-26 2:32 Haozhong Zhang [this message]
2017-05-26 2:32 ` [Qemu-devel] [RESEND PATCH 2/2] hostmem-file: add an attribute 'align' to set its alignment Haozhong Zhang
2017-05-26 6:39 ` Marc-André Lureau
[not found] ` <20170526065132.ayapfebbft5lyigd@hz-desktop>
2017-05-26 7:05 ` Marc-André Lureau
[not found] ` <20170526071654.kxcqflvpo2tvcrvu@hz-desktop>
2017-05-26 14:24 ` Dan Williams
2017-05-26 18:55 ` Eduardo Habkost
2017-05-26 20:50 ` Dan Williams
2017-05-27 1:04 ` Haozhong Zhang
2017-05-30 12:17 ` Paolo Bonzini
2017-05-30 19:16 ` Dan Williams
2017-05-26 3:34 ` [Qemu-devel] [RESEND PATCH 1/2] nvdimm: warn if the backend is not a DAX device Dan Williams
2017-05-26 4:30 ` Haozhong Zhang
2017-05-26 14:28 ` Dan Williams
2017-05-26 14:38 ` Daniel P. Berrange
2017-05-26 15:25 ` Dan Williams
2017-05-27 1:13 ` Haozhong Zhang
2017-05-30 9:20 ` Daniel P. Berrange
2017-05-30 11:41 ` Dan Williams
2017-06-01 12:00 ` Xiao Guangrong
2017-06-01 13:53 ` Dan Williams
2017-06-01 13:53 ` [Qemu-devel] " Dan Williams
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=20170526023213.18741-1-haozhong.zhang@intel.com \
--to=haozhong.zhang@intel.com \
--cc=dan.j.williams@intel.com \
--cc=guangrong.xiao@gmail.com \
--cc=imammedo@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.