From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
Victor Kaplansky <victork@redhat.com>,
qemu-stable@nongnu.org
Subject: [Qemu-devel] [PULL 02/23] vhost-user: don't merge regions with different fds
Date: Wed, 24 Feb 2016 22:35:11 +0200 [thread overview]
Message-ID: <1456343639-3471-3-git-send-email-mst@redhat.com> (raw)
In-Reply-To: <1456343639-3471-1-git-send-email-mst@redhat.com>
vhost currently merges regions with contiguious virtual and physical
addresses. This breaks for vhost-user since that also needs fds to
match.
Add a vhost_ops entry to compare the fds for vhost-user only.
Cc: qemu-stable@nongnu.org
Cc: Victor Kaplansky <victork@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
include/hw/virtio/vhost-backend.h | 4 ++++
hw/virtio/vhost-user.c | 20 ++++++++++++++++++++
hw/virtio/vhost.c | 7 +++++++
3 files changed, 31 insertions(+)
diff --git a/include/hw/virtio/vhost-backend.h b/include/hw/virtio/vhost-backend.h
index c59cc81..a6e5c97 100644
--- a/include/hw/virtio/vhost-backend.h
+++ b/include/hw/virtio/vhost-backend.h
@@ -70,6 +70,9 @@ typedef int (*vhost_set_vring_enable_op)(struct vhost_dev *dev,
typedef bool (*vhost_requires_shm_log_op)(struct vhost_dev *dev);
typedef int (*vhost_migration_done_op)(struct vhost_dev *dev,
char *mac_addr);
+typedef bool (*vhost_backend_can_merge_op)(struct vhost_dev *dev,
+ uint64_t start1, uint64_t size1,
+ uint64_t start2, uint64_t size2);
typedef struct VhostOps {
VhostBackendType backend_type;
@@ -97,6 +100,7 @@ typedef struct VhostOps {
vhost_set_vring_enable_op vhost_set_vring_enable;
vhost_requires_shm_log_op vhost_requires_shm_log;
vhost_migration_done_op vhost_migration_done;
+ vhost_backend_can_merge_op vhost_backend_can_merge;
} VhostOps;
extern const VhostOps user_ops;
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index 7fde137..7ed3dd9 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -611,6 +611,25 @@ static int vhost_user_migration_done(struct vhost_dev *dev, char* mac_addr)
return -1;
}
+static bool vhost_user_can_merge(struct vhost_dev *dev,
+ uint64_t start1, uint64_t size1,
+ uint64_t start2, uint64_t size2)
+{
+ ram_addr_t ram_addr;
+ int mfd, rfd;
+ MemoryRegion *mr;
+
+ mr = qemu_ram_addr_from_host((void *)(uintptr_t)start1, &ram_addr);
+ assert(mr);
+ mfd = qemu_get_ram_fd(ram_addr);
+
+ mr = qemu_ram_addr_from_host((void *)(uintptr_t)start2, &ram_addr);
+ assert(mr);
+ rfd = qemu_get_ram_fd(ram_addr);
+
+ return mfd == rfd;
+}
+
const VhostOps user_ops = {
.backend_type = VHOST_BACKEND_TYPE_USER,
.vhost_backend_init = vhost_user_init,
@@ -633,4 +652,5 @@ const VhostOps user_ops = {
.vhost_set_vring_enable = vhost_user_set_vring_enable,
.vhost_requires_shm_log = vhost_user_requires_shm_log,
.vhost_migration_done = vhost_user_migration_done,
+ .vhost_backend_can_merge = vhost_user_can_merge,
};
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index 72d0c9e..392d848 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -260,6 +260,13 @@ static void vhost_dev_assign_memory(struct vhost_dev *dev,
continue;
}
+ if (dev->vhost_ops->vhost_backend_can_merge &&
+ !dev->vhost_ops->vhost_backend_can_merge(dev, uaddr, size,
+ reg->userspace_addr,
+ reg->memory_size)) {
+ continue;
+ }
+
if (merged) {
--to;
assert(to >= 0);
--
MST
next prev parent reply other threads:[~2016-02-24 20:35 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-24 20:35 [Qemu-devel] [PULL 00/23] vhost, virtio, pci, pc Michael S. Tsirkin
2016-02-24 20:35 ` [Qemu-devel] [PULL 01/23] bios-linker-loader: document+validate input Michael S. Tsirkin
2016-02-24 20:35 ` Michael S. Tsirkin [this message]
2016-02-24 20:35 ` [Qemu-devel] [PULL 03/23] move get_current_ram_size to virtio-balloon.c Michael S. Tsirkin
2016-02-24 20:35 ` [Qemu-devel] [PULL 04/23] pc-dimm: rename pc_dimm_built_list() Michael S. Tsirkin
2016-02-24 20:35 ` [Qemu-devel] [PULL 05/23] pc-dimm: add pc_dimm_build_list() Michael S. Tsirkin
2016-02-25 7:01 ` Vladimir Sementsov-Ogievskiy
2016-02-25 8:39 ` Michael S. Tsirkin
2016-02-25 8:55 ` Vladimir Sementsov-Ogievskiy
2016-02-25 9:11 ` Michael S. Tsirkin
2016-02-25 9:54 ` Vladimir Sementsov-Ogievskiy
2016-02-25 10:09 ` Paolo Bonzini
2016-02-25 10:12 ` Michael S. Tsirkin
2016-02-25 10:22 ` Michael S. Tsirkin
2016-02-26 9:08 ` Vladimir Sementsov-Ogievskiy
2016-02-26 9:08 ` Vladimir Sementsov-Ogievskiy
2016-02-24 20:35 ` [Qemu-devel] [PULL 06/23] virtio-balloon: rewrite get_current_ram_size() Michael S. Tsirkin
2016-02-24 20:35 ` [Qemu-devel] [PULL 07/23] balloon: Use only 'pc-dimm' type dimm for ballooning Michael S. Tsirkin
2016-02-24 20:35 ` [Qemu-devel] [PULL 08/23] pci core: function pci_host_bus_register() cleanup Michael S. Tsirkin
2016-02-24 20:35 ` [Qemu-devel] [PULL 09/23] pci core: function pci_bus_init() cleanup Michael S. Tsirkin
2016-02-24 20:35 ` [Qemu-devel] [PULL 10/23] block-migration: acquire AioContext as necessary Michael S. Tsirkin
2016-02-24 20:35 ` [Qemu-devel] [PULL 11/23] vring: make vring_enable_notification return void Michael S. Tsirkin
2016-02-24 20:35 ` [Qemu-devel] [PULL 12/23] virtio: add AioContext-specific function for host notifiers Michael S. Tsirkin
2016-02-24 20:35 ` [Qemu-devel] [PULL 13/23] virtio: export vring_notify as virtio_should_notify Michael S. Tsirkin
2016-02-24 20:35 ` [Qemu-devel] [PULL 14/23] virtio-blk: fix "disabled data plane" mode Michael S. Tsirkin
2016-02-24 20:35 ` [Qemu-devel] [PULL 15/23] virtio-blk: do not use vring in dataplane Michael S. Tsirkin
2016-02-24 20:36 ` [Qemu-devel] [PULL 16/23] virtio-scsi: " Michael S. Tsirkin
2016-02-24 20:36 ` [Qemu-devel] [PULL 17/23] vring: remove Michael S. Tsirkin
2016-02-24 20:36 ` [Qemu-devel] [PULL 18/23] tests/vhost-user-bridge: fix build on 32 bit systems Michael S. Tsirkin
2016-02-24 20:36 ` [Qemu-devel] [PULL 19/23] q35: Remove old machine versions Michael S. Tsirkin
2016-02-24 20:36 ` [Qemu-devel] [PULL 20/23] machine: Remove no_tco field Michael S. Tsirkin
2016-02-24 20:36 ` [Qemu-devel] [PULL 21/23] ich9: Remove enable_tco arguments from init functions Michael S. Tsirkin
2016-02-24 20:36 ` [Qemu-devel] [PULL 22/23] q35: Remove unused q35-acpi-dsdt.aml file Michael S. Tsirkin
2016-02-24 20:36 ` [Qemu-devel] [PULL 23/23] q35: No need to check gigabyte_align Michael S. Tsirkin
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=1456343639-3471-3-git-send-email-mst@redhat.com \
--to=mst@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-stable@nongnu.org \
--cc=victork@redhat.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).