All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: marcandre.lureau@redhat.com
Cc: haifeng.lin@huawei.com, thibaut.collet@6wind.com,
	jasowang@redhat.com, qemu-devel@nongnu.org, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH v4 11/22] vhost-user: send log shm fd along with log_base
Date: Mon, 21 Sep 2015 11:49:57 +0300	[thread overview]
Message-ID: <20150921114747-mutt-send-email-mst@redhat.com> (raw)
In-Reply-To: <1442657533-13030-12-git-send-email-marcandre.lureau@redhat.com>

On Sat, Sep 19, 2015 at 12:12:02PM +0200, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> Send the shm for the dirty pages logging if the backend supports
> VHOST_USER_PROTOCOL_F_LOG_SHMFD.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  hw/virtio/vhost-backend.c         |  3 ++-
>  hw/virtio/vhost-user.c            | 17 ++++++++++++++---
>  hw/virtio/vhost.c                 |  5 +++--
>  include/hw/virtio/vhost-backend.h |  4 +++-
>  4 files changed, 22 insertions(+), 7 deletions(-)
> 
> diff --git a/hw/virtio/vhost-backend.c b/hw/virtio/vhost-backend.c
> index bf2d1d4..3f2d6ea 100644
> --- a/hw/virtio/vhost-backend.c
> +++ b/hw/virtio/vhost-backend.c
> @@ -66,7 +66,8 @@ static int vhost_scsi_get_abi_version(struct vhost_dev *dev, int *version)
>      return vhost_kernel_call(dev, VHOST_SCSI_GET_ABI_VERSION, version);
>  }
>  
> -static int vhost_set_log_base(struct vhost_dev *dev, uint64_t base)
> +static int vhost_set_log_base(struct vhost_dev *dev, uint64_t base,
> +                              struct vhost_log *log)
>  {
>      return vhost_kernel_call(dev, VHOST_SET_LOG_BASE, &base);
>  }
> diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
> index d3334f5..3cb5559 100644
> --- a/hw/virtio/vhost-user.c
> +++ b/hw/virtio/vhost-user.c
> @@ -26,7 +26,9 @@
>  #define VHOST_MEMORY_MAX_NREGIONS    8
>  
>  #define VHOST_USER_F_PROTOCOL_FEATURES 30
> -#define VHOST_USER_PROTOCOL_FEATURE_MASK 0x0ULL
> +
> +#define VHOST_USER_PROTOCOL_FEATURE_MASK 0x1ULL
> +#define VHOST_USER_PROTOCOL_F_LOG_SHMFD 0
>  
>  typedef enum VhostUserRequest {
>      VHOST_USER_NONE = 0,
> @@ -182,8 +184,11 @@ static int vhost_scsi_get_abi_version(struct vhost_dev *dev, int *version)
>      return -1;
>  }
>  
> -static int vhost_set_log_base(struct vhost_dev *dev, uint64_t base)
> +static int vhost_set_log_base(struct vhost_dev *dev, uint64_t base,
> +                              struct vhost_log *log)
>  {
> +    int fds[VHOST_MEMORY_MAX_NREGIONS];
> +    size_t fd_num = 0;
>      VhostUserMsg msg = {
>          .request = VHOST_USER_SET_LOG_BASE,
>          .flags = VHOST_USER_VERSION,
> @@ -191,7 +196,13 @@ static int vhost_set_log_base(struct vhost_dev *dev, uint64_t base)
>          .size = sizeof(m.u64),
>      };
>  
> -    vhost_user_write(dev, &msg, NULL, 0);
> +    if (virtio_has_feature(dev->protocol_features,
> +                           VHOST_USER_PROTOCOL_F_LOG_SHMFD) &&
> +        log->fd != -1) {
> +        fds[fd_num++] = log->fd;
> +    }
> +
> +    vhost_user_write(dev, &msg, fds, fd_num);
>  
>      return 0;
>  }

Doesn't this one have to get a response?
Otherwise the other side might still be using the old
buffer after we've updated this one.

Probably need a protocol feature, but I guess we can reuse
VHOST_USER_PROTOCOL_F_LOG_SHMFD - IIUC logging doesn't
work without this anyway ...


> diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> index 83ef164..0fa7b69 100644
> --- a/hw/virtio/vhost.c
> +++ b/hw/virtio/vhost.c
> @@ -359,7 +359,7 @@ static inline void vhost_dev_log_resize(struct vhost_dev* dev, uint64_t size)
>  
>      /* inform backend of log switching, this must be done before
>         releasing the current log, to ensure no logging is lost */
> -    r = dev->vhost_ops->vhost_set_log_base(dev, log_base);
> +    r = dev->vhost_ops->vhost_set_log_base(dev, log_base, log);
>      assert(r >= 0);
>      vhost_log_put(dev, true);
>      dev->log = log;
> @@ -1167,7 +1167,8 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev)
>          hdev->log = vhost_log_get(hdev->log_size, share);
>          log_base = (uintptr_t)hdev->log->log;
>          r = hdev->vhost_ops->vhost_set_log_base(hdev,
> -                                                hdev->log_size ? log_base : 0);
> +                                                hdev->log_size ? log_base : 0,
> +                                                hdev->log);
>          if (r < 0) {
>              r = -errno;
>              goto fail_log;
> diff --git a/include/hw/virtio/vhost-backend.h b/include/hw/virtio/vhost-backend.h
> index 42cfb87..a87f0b3 100644
> --- a/include/hw/virtio/vhost-backend.h
> +++ b/include/hw/virtio/vhost-backend.h
> @@ -20,6 +20,7 @@ typedef enum VhostBackendType {
>  
>  struct vhost_dev;
>  struct vhost_memory;
> +struct vhost_log;
>  struct vhost_vring_file;
>  struct vhost_vring_state;
>  struct vhost_vring_addr;
> @@ -36,7 +37,8 @@ typedef int (*vhost_scsi_clear_endpoint_op)(struct vhost_dev *dev,
>                                              struct vhost_scsi_target *target);
>  typedef int (*vhost_scsi_get_abi_version_op)(struct vhost_dev *dev,
>                                               int *version);
> -typedef int (*vhost_set_log_base_op)(struct vhost_dev *dev, uint64_t base);
> +typedef int (*vhost_set_log_base_op)(struct vhost_dev *dev, uint64_t base,
> +                                     struct vhost_log *log);
>  typedef int (*vhost_set_mem_table_op)(struct vhost_dev *dev,
>                                        struct vhost_memory *mem);
>  typedef int (*vhost_set_vring_addr_op)(struct vhost_dev *dev,
> -- 
> 2.4.3

  reply	other threads:[~2015-09-21  8:50 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-19 10:11 [Qemu-devel] [PATCH v4 00/22] vhost-user: add migration support marcandre.lureau
2015-09-19 10:11 ` [Qemu-devel] [PATCH v4 01/22] vhost-user: refactor ioctl translation marcandre.lureau
2015-09-19 10:11 ` [Qemu-devel] [PATCH v4 02/22] vhost-user: add protocol feature negotiation marcandre.lureau
2015-09-19 10:11 ` [Qemu-devel] [PATCH v4 03/22] vhost-user: unit test for new messages marcandre.lureau
2015-09-19 10:11 ` [Qemu-devel] [PATCH v4 04/22] configure: probe for memfd marcandre.lureau
2015-09-19 10:11 ` [Qemu-devel] [PATCH v4 05/22] util: add linux-only memfd fallback marcandre.lureau
2015-09-19 10:11 ` [Qemu-devel] [PATCH v4 06/22] util: add memfd helpers marcandre.lureau
2015-09-19 10:11 ` [Qemu-devel] [PATCH v4 07/22] vhost: alloc shareable log marcandre.lureau
2015-09-21  8:44   ` Michael S. Tsirkin
2015-09-21 14:02     ` Marc-André Lureau
2015-09-21 19:29       ` Michael S. Tsirkin
2015-09-21 21:44         ` Marc-André Lureau
2015-09-22 10:12           ` Michael S. Tsirkin
2015-09-22 11:01             ` Marc-André Lureau
2015-09-22 11:41               ` Michael S. Tsirkin
2015-09-22 11:50                 ` Marc-André Lureau
2015-09-22 11:54                   ` Michael S. Tsirkin
2015-09-19 10:11 ` [Qemu-devel] [PATCH v4 08/22] vhost: document log resizing marcandre.lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 09/22] vhost: use a function for each call marcandre.lureau
2015-09-21  7:33   ` Thibaut Collet
2015-09-21  8:56     ` Michael S. Tsirkin
2015-09-21  8:58   ` Michael S. Tsirkin
2015-09-21 14:05     ` Marc-André Lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 10/22] vhost-user: remove vhost_user_request_translate() marcandre.lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 11/22] vhost-user: send log shm fd along with log_base marcandre.lureau
2015-09-21  8:49   ` Michael S. Tsirkin [this message]
2015-09-21 14:05     ` Marc-André Lureau
2015-09-21 19:30       ` Michael S. Tsirkin
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 12/22] vhost: only use shared log if in use by backend marcandre.lureau
2015-09-21  8:46   ` Michael S. Tsirkin
2015-09-21 14:03     ` Marc-André Lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 13/22] vhost-user: document migration log marcandre.lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 14/22] net: add trace_vhost_user_event marcandre.lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 15/22] vhost user: add support of live migration marcandre.lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 16/22] vhost user: add rarp sending after live migration for legacy guest marcandre.lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 17/22] vhost-user-test: move wait_for_fds() out marcandre.lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 18/22] vhost-user-test: remove useless static check marcandre.lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 19/22] vhost-user-test: wrap server in TestServer struct marcandre.lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 20/22] vhost-user-test: learn to tweak various qemu arguments marcandre.lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 21/22] vhost-user-test: add live-migration test marcandre.lureau
2015-09-19 10:12 ` [Qemu-devel] [PATCH v4 22/22] vhost-user-test: check ownership during migration marcandre.lureau

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=20150921114747-mutt-send-email-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=haifeng.lin@huawei.com \
    --cc=jasowang@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=thibaut.collet@6wind.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.