From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33504) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZwWRk-00022T-1o for qemu-devel@nongnu.org; Wed, 11 Nov 2015 09:32:25 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZwWRg-00080J-JY for qemu-devel@nongnu.org; Wed, 11 Nov 2015 09:32:23 -0500 Received: from mx5-phx2.redhat.com ([209.132.183.37]:43493) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZwWRg-00080C-Bt for qemu-devel@nongnu.org; Wed, 11 Nov 2015 09:32:20 -0500 Date: Wed, 11 Nov 2015 09:32:17 -0500 (EST) From: =?utf-8?Q?Marc-Andr=C3=A9?= Lureau Message-ID: <1366243584.6979611.1447252337630.JavaMail.zimbra@redhat.com> In-Reply-To: <1447251876-4811-1-git-send-email-victork@redhat.com> References: <1447251876-4811-1-git-send-email-victork@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] vhost-user: modify SET_LOG_BASE to pass mmap size and offset List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Victor Kaplansky Cc: qemu-devel@nongnu.org, "Michael S. Tsirkin" 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 What's the motivation for doing this? The offset is always 0, and the size must at least match the size of VM memory. > > --- > 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 >