qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Tiwei Bie <tiwei.bie@intel.com>
Subject: [Qemu-devel] [PULL 01/31] vhost: allow backends to filter memory sections
Date: Fri, 1 Jun 2018 19:26:40 +0300	[thread overview]
Message-ID: <20180601162620.32362-2-mst@redhat.com> (raw)
In-Reply-To: <20180601162620.32362-1-mst@redhat.com>

From: Tiwei Bie <tiwei.bie@intel.com>

This patch introduces a vhost op for vhost backends to allow
them to filter the memory sections that they can handle.

Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/virtio/vhost-backend.h |  4 ++++
 hw/virtio/vhost-user.c            | 11 +++++++++++
 hw/virtio/vhost.c                 |  9 +++++++--
 3 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/include/hw/virtio/vhost-backend.h b/include/hw/virtio/vhost-backend.h
index 5dac61f9ea..81283ec50f 100644
--- a/include/hw/virtio/vhost-backend.h
+++ b/include/hw/virtio/vhost-backend.h
@@ -101,6 +101,9 @@ typedef int (*vhost_crypto_create_session_op)(struct vhost_dev *dev,
 typedef int (*vhost_crypto_close_session_op)(struct vhost_dev *dev,
                                              uint64_t session_id);
 
+typedef bool (*vhost_backend_mem_section_filter_op)(struct vhost_dev *dev,
+                                                MemoryRegionSection *section);
+
 typedef struct VhostOps {
     VhostBackendType backend_type;
     vhost_backend_init vhost_backend_init;
@@ -138,6 +141,7 @@ typedef struct VhostOps {
     vhost_set_config_op vhost_set_config;
     vhost_crypto_create_session_op vhost_crypto_create_session;
     vhost_crypto_close_session_op vhost_crypto_close_session;
+    vhost_backend_mem_section_filter_op vhost_backend_mem_section_filter;
 } VhostOps;
 
 extern const VhostOps user_ops;
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index ca554d4ff1..da0756effe 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -1620,6 +1620,16 @@ vhost_user_crypto_close_session(struct vhost_dev *dev, uint64_t session_id)
     return 0;
 }
 
+static bool vhost_user_mem_section_filter(struct vhost_dev *dev,
+                                          MemoryRegionSection *section)
+{
+    bool result;
+
+    result = memory_region_get_fd(section->mr) >= 0;
+
+    return result;
+}
+
 const VhostOps user_ops = {
         .backend_type = VHOST_BACKEND_TYPE_USER,
         .vhost_backend_init = vhost_user_init,
@@ -1650,4 +1660,5 @@ const VhostOps user_ops = {
         .vhost_set_config = vhost_user_set_config,
         .vhost_crypto_create_session = vhost_user_crypto_create_session,
         .vhost_crypto_close_session = vhost_user_crypto_close_session,
+        .vhost_backend_mem_section_filter = vhost_user_mem_section_filter,
 };
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index b08290036d..624ade9682 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -386,7 +386,7 @@ static int vhost_verify_ring_mappings(struct vhost_dev *dev,
     return r;
 }
 
-static bool vhost_section(MemoryRegionSection *section)
+static bool vhost_section(struct vhost_dev *dev, MemoryRegionSection *section)
 {
     bool result;
     bool log_dirty = memory_region_get_dirty_log_mask(section->mr) &
@@ -399,6 +399,11 @@ static bool vhost_section(MemoryRegionSection *section)
      */
     result &= !log_dirty;
 
+    if (result && dev->vhost_ops->vhost_backend_mem_section_filter) {
+        result &=
+            dev->vhost_ops->vhost_backend_mem_section_filter(dev, section);
+    }
+
     trace_vhost_section(section->mr->name, result);
     return result;
 }
@@ -632,7 +637,7 @@ static void vhost_region_addnop(MemoryListener *listener,
     struct vhost_dev *dev = container_of(listener, struct vhost_dev,
                                          memory_listener);
 
-    if (!vhost_section(section)) {
+    if (!vhost_section(dev, section)) {
         return;
     }
     vhost_region_add_section(dev, section);
-- 
MST

  reply	other threads:[~2018-06-01 16:26 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-01 16:26 [Qemu-devel] [PULL 00/31] acpi, vhost, misc: fixes, features Michael S. Tsirkin
2018-06-01 16:26 ` Michael S. Tsirkin [this message]
2018-06-01 16:26 ` [Qemu-devel] [PULL 03/31] vhost-user: introduce shared vhost-user state Michael S. Tsirkin
2018-06-01 16:26 ` [Qemu-devel] [PULL 02/31] vhost-user: allow slave to send fds via slave channel Michael S. Tsirkin
2018-06-01 16:26 ` [Qemu-devel] [PULL 04/31] vhost-user: support registering external host notifiers Michael S. Tsirkin
2018-06-01 16:26 ` [Qemu-devel] [PULL 05/31] libvhost-user: support host notifier Michael S. Tsirkin
2018-06-01 16:26 ` [Qemu-devel] [PULL 06/31] vhost-user-bridge: " Michael S. Tsirkin
2018-06-01 16:26 ` [Qemu-devel] [PULL 07/31] osdep: add wait.h compat macros Michael S. Tsirkin
2018-06-01 16:26 ` [Qemu-devel] [PULL 08/31] libqtest: fail if child coredumps Michael S. Tsirkin
2018-06-01 16:26 ` [Qemu-devel] [PULL 09/31] block: use local path for local headers Michael S. Tsirkin
2018-06-01 16:26 ` [Qemu-devel] [PULL 10/31] crypto: " Michael S. Tsirkin
2018-06-01 16:26 ` [Qemu-devel] [PULL 11/31] hppa: " Michael S. Tsirkin
2018-06-01 16:26 ` [Qemu-devel] [PULL 12/31] migration: drop an unused include Michael S. Tsirkin
2018-06-01 16:26 ` [Qemu-devel] [PULL 13/31] trace: use local path for local headers Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 14/31] display: " Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 15/31] ide: " Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 16/31] ioapic: fix up includes Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 18/31] rocker: drop an unused include Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 17/31] e1000e: use local path for local headers Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 19/31] ppc: " Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 20/31] vhost-scsi: drop an unused include Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 21/31] sd: fix up include Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 22/31] usb: use local path for local headers Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 23/31] migration: " Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 24/31] colo: " Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 25/31] qga: " Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 26/31] ui: " Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 27/31] arch_init: sort architectures Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 28/31] tests/.gitignore: add entry for generated file Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 29/31] nvdimm, acpi: support NFIT platform capabilities Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 31/31] vhost-blk: turn on pre-defined RO feature bit Michael S. Tsirkin
2018-06-01 16:27 ` [Qemu-devel] [PULL 30/31] ACPI testing: test NFIT platform capabilities Michael S. Tsirkin
2018-06-04 10:28 ` [Qemu-devel] [PULL 00/31] acpi, vhost, misc: fixes, features Peter Maydell
2018-06-08 17:52   ` Philippe Mathieu-Daudé
2018-06-08 18:47     ` Philippe Mathieu-Daudé
2018-06-09 11:38       ` Peter Maydell
2018-06-06 10:09 ` Thomas Huth

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=20180601162620.32362-2-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=tiwei.bie@intel.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).