From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Marc-André Lureau" <mlureau@redhat.com>
Cc: Victor Kaplansky <victork@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] vhost-user: modify SET_LOG_BASE to pass mmap size and offset
Date: Wed, 11 Nov 2015 17:17:23 +0200 [thread overview]
Message-ID: <20151111171615-mutt-send-email-mst@redhat.com> (raw)
In-Reply-To: <1366243584.6979611.1447252337630.JavaMail.zimbra@redhat.com>
On Wed, Nov 11, 2015 at 09:32:17AM -0500, Marc-André Lureau wrote:
> Hi
>
> ----- Original Message -----
> > Unlike the kernel, vhost-user application accesses log table by
> > mmaping it to its user space. This change adds two new fields to
> > VhostUserMsg payload: mmap_size, and mmap_offset and make QEMU to
> > pass the to vhost-user application in VHOST_USER_SET_LOG_BASE
> > request.
> >
> > Signed-off-by: Victor Kaplansky <victork@redhat.com>
>
> What's the motivation for doing this? The offset is always 0, and the size must at least match the size of VM memory.
Remote doesn't know the size though, and offset is only there
in the current implementation.
> >
> > ---
> > hw/virtio/vhost-user.c | 11 +++++++++--
> > tests/vhost-user-test.c | 8 ++++++++
> > docs/specs/vhost-user.txt | 8 +++++++-
> > 3 files changed, 24 insertions(+), 3 deletions(-)
> >
> > diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
> > index 83c84f1..46c63bc 100644
> > --- a/hw/virtio/vhost-user.c
> > +++ b/hw/virtio/vhost-user.c
> > @@ -75,6 +75,11 @@ typedef struct VhostUserMemory {
> > VhostUserMemoryRegion regions[VHOST_MEMORY_MAX_NREGIONS];
> > } VhostUserMemory;
> >
> > +typedef struct VhostUserLog {
> > + uint64_t mmap_size;
> > + uint64_t mmap_offset;
> > +} VhostUserLog;
> > +
> > typedef struct VhostUserMsg {
> > VhostUserRequest request;
> >
> > @@ -89,6 +94,7 @@ typedef struct VhostUserMsg {
> > struct vhost_vring_state state;
> > struct vhost_vring_addr addr;
> > VhostUserMemory memory;
> > + VhostUserLog log;
> > } payload;
> > } QEMU_PACKED VhostUserMsg;
> >
> > @@ -200,8 +206,9 @@ static int vhost_user_set_log_base(struct vhost_dev *dev,
> > uint64_t base,
> > VhostUserMsg msg = {
> > .request = VHOST_USER_SET_LOG_BASE,
> > .flags = VHOST_USER_VERSION,
> > - .payload.u64 = base,
> > - .size = sizeof(msg.payload.u64),
> > + .payload.log.mmap_size = log->size,
> > + .payload.log.mmap_offset = 0,
> > + .size = sizeof(msg.payload.log),
> > };
> >
> > if (shmfd && log->fd != -1) {
> > diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c
> > index b6dde75..f005ecf 100644
> > --- a/tests/vhost-user-test.c
> > +++ b/tests/vhost-user-test.c
> > @@ -86,6 +86,11 @@ typedef struct VhostUserMemory {
> > VhostUserMemoryRegion regions[VHOST_MEMORY_MAX_NREGIONS];
> > } VhostUserMemory;
> >
> > +typedef struct VhostUserLog {
> > + uint64_t mmap_size;
> > + uint64_t mmap_offset;
> > +} VhostUserLog;
> > +
> > typedef struct VhostUserMsg {
> > VhostUserRequest request;
> >
> > @@ -94,10 +99,13 @@ typedef struct VhostUserMsg {
> > uint32_t flags;
> > uint32_t size; /* the following payload size */
> > union {
> > +#define VHOST_USER_VRING_IDX_MASK (0xff)
> > +#define VHOST_USER_VRING_NOFD_MASK (0x1<<8)
> > uint64_t u64;
> > struct vhost_vring_state state;
> > struct vhost_vring_addr addr;
> > VhostUserMemory memory;
> > + VhostUserLog log;
> > } payload;
> > } QEMU_PACKED VhostUserMsg;
> >
> > diff --git a/docs/specs/vhost-user.txt b/docs/specs/vhost-user.txt
> > index e0d71e2..eb8f2b2 100644
> > --- a/docs/specs/vhost-user.txt
> > +++ b/docs/specs/vhost-user.txt
> > @@ -98,6 +98,7 @@ typedef struct VhostUserMsg {
> > struct vhost_vring_state state;
> > struct vhost_vring_addr addr;
> > VhostUserMemory memory;
> > + VhostUserLog log;
> > };
> > } QEMU_PACKED VhostUserMsg;
> >
> > @@ -282,7 +283,12 @@ Message types
> > Master payload: u64
> > Slave payload: N/A
> >
> > - Sets the logging base address.
> > + Sets logging shared memory space.
> > + When slave has VHOST_USER_PROTOCOL_F_LOG_SHMFD protocol
> > + feature, the log memory fd is provided in the ancillary data of
> > + VHOST_USER_SET_LOG_BASE message, the size and offset of shared
> > + memory area provided in the message.
> > +
> >
> > * VHOST_USER_SET_LOG_FD
> >
> > --
> > --Victor
> >
next prev parent reply other threads:[~2015-11-11 15:19 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-11 14:26 [Qemu-devel] [PATCH] vhost-user: modify SET_LOG_BASE to pass mmap size and offset Victor Kaplansky
2015-11-11 14:32 ` Marc-André Lureau
2015-11-11 15:17 ` Michael S. Tsirkin [this message]
2015-11-11 15:23 ` Marc-André Lureau
2015-11-11 15:24 ` Michael S. Tsirkin
2015-11-11 15:33 ` Marc-André Lureau
2015-11-12 11:57 ` 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=20151111171615-mutt-send-email-mst@redhat.com \
--to=mst@redhat.com \
--cc=mlureau@redhat.com \
--cc=qemu-devel@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).