All of lore.kernel.org
 help / color / mirror / Atom feed
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 v3 02/21] vhost-user: don't merge regions with different fds
Date: Thu, 25 Feb 2016 13:20:24 +0200	[thread overview]
Message-ID: <1456399032-6172-3-git-send-email-mst@redhat.com> (raw)
In-Reply-To: <1456399032-6172-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

  parent reply	other threads:[~2016-02-25 11:20 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-25 11:20 [Qemu-devel] [PULL v3 00/21] vhost, virtio, pci, pc Michael S. Tsirkin
2016-02-25 11:20 ` [Qemu-arm] [PULL v3 01/21] bios-linker-loader: document+validate input Michael S. Tsirkin
2016-02-25 11:20   ` [Qemu-devel] " Michael S. Tsirkin
2016-02-25 11:20 ` Michael S. Tsirkin [this message]
2016-02-25 11:20 ` [Qemu-devel] [PULL v3 03/21] move get_current_ram_size to virtio-balloon.c Michael S. Tsirkin
2016-02-25 11:20 ` [Qemu-devel] [PULL v3 04/21] virtio-balloon: rewrite get_current_ram_size() Michael S. Tsirkin
2016-03-01 16:28   ` Vladimir Sementsov-Ogievskiy
2016-02-25 11:20 ` [Qemu-devel] [PULL v3 05/21] balloon: Use only 'pc-dimm' type dimm for ballooning Michael S. Tsirkin
2016-02-25 11:20 ` [Qemu-devel] [PULL v3 06/21] pci core: function pci_host_bus_register() cleanup Michael S. Tsirkin
2016-02-25 11:20 ` [Qemu-devel] [PULL v3 07/21] pci core: function pci_bus_init() cleanup Michael S. Tsirkin
2016-02-25 11:20 ` [Qemu-devel] [PULL v3 08/21] block-migration: acquire AioContext as necessary Michael S. Tsirkin
2016-02-25 11:20 ` [Qemu-devel] [PULL v3 09/21] vring: make vring_enable_notification return void Michael S. Tsirkin
2016-02-25 11:20 ` [Qemu-devel] [PULL v3 10/21] virtio: add AioContext-specific function for host notifiers Michael S. Tsirkin
2016-02-25 11:20 ` [Qemu-devel] [PULL v3 11/21] virtio: export vring_notify as virtio_should_notify Michael S. Tsirkin
2016-02-25 11:20 ` [Qemu-devel] [PULL v3 12/21] virtio-blk: fix "disabled data plane" mode Michael S. Tsirkin
2016-02-25 11:21 ` [Qemu-devel] [PULL v3 13/21] virtio-blk: do not use vring in dataplane Michael S. Tsirkin
2016-02-25 11:21 ` [Qemu-devel] [PULL v3 14/21] virtio-scsi: " Michael S. Tsirkin
2016-02-25 11:21 ` [Qemu-devel] [PULL v3 15/21] vring: remove Michael S. Tsirkin
2016-02-25 11:21 ` [Qemu-devel] [PULL v3 16/21] tests/vhost-user-bridge: fix build on 32 bit systems Michael S. Tsirkin
2016-02-25 11:21 ` [Qemu-devel] [PULL v3 17/21] q35: Remove old machine versions Michael S. Tsirkin
2016-02-25 11:21 ` [Qemu-devel] [PULL v3 18/21] machine: Remove no_tco field Michael S. Tsirkin
2016-02-25 11:21 ` [Qemu-devel] [PULL v3 19/21] ich9: Remove enable_tco arguments from init functions Michael S. Tsirkin
2016-02-25 11:21 ` [Qemu-devel] [PULL v3 20/21] q35: Remove unused q35-acpi-dsdt.aml file Michael S. Tsirkin
2016-02-25 11:21 ` [Qemu-devel] [PULL v3 21/21] q35: No need to check gigabyte_align Michael S. Tsirkin
2016-02-25 12:57 ` [Qemu-devel] [PULL v3 00/21] vhost, virtio, pci, pc Peter Maydell

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=1456399032-6172-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 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.