From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38658) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZyMQy-0003pG-Md for qemu-devel@nongnu.org; Mon, 16 Nov 2015 11:15:13 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZyMQu-0006MX-EZ for qemu-devel@nongnu.org; Mon, 16 Nov 2015 11:15:12 -0500 Received: from mail-wm0-x236.google.com ([2a00:1450:400c:c09::236]:33270) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZyMQu-0006MN-6Q for qemu-devel@nongnu.org; Mon, 16 Nov 2015 11:15:08 -0500 Received: by wmec201 with SMTP id c201so184729286wme.0 for ; Mon, 16 Nov 2015 08:15:07 -0800 (PST) From: Thibaut Collet Date: Mon, 16 Nov 2015 17:14:37 +0100 Message-Id: <1447690477-22046-2-git-send-email-thibaut.collet@6wind.com> In-Reply-To: <1447690477-22046-1-git-send-email-thibaut.collet@6wind.com> References: <1447690477-22046-1-git-send-email-thibaut.collet@6wind.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [PATCH 1/1] vhost-user: modify SET_LOG_BASE only if VHOST_USER_PROTOCOL_F_LOG_SHMFD is set List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: thibaut.collet@6wind.com, qemu-devel@nongnu.org, mst@redhat.com, marcandre.lureau@gmail.com, victork@redhat.com Fixes: 2b8819c6eee5 ("vhost-user: modify SET_LOG_BASE to pass mmap size and offset") For compatibility with old vhost backend content of the SET_LOG_BASE message can not be modified. The SET_LOG_BASE message payload is modified only if the VHOST_USER_PROTOCOL_F_LOG_SHMFD protocol feature has been negociated. The documentation has been updated accordingly with remarks from Marc André Lureau. Signed-off-by: Thibaut Collet --- docs/specs/vhost-user.txt | 16 ++++++++++++++-- hw/virtio/vhost-user.c | 12 +++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/docs/specs/vhost-user.txt b/docs/specs/vhost-user.txt index 26dde2e..da4bf9c 100644 --- a/docs/specs/vhost-user.txt +++ b/docs/specs/vhost-user.txt @@ -87,6 +87,14 @@ Depending on the request type, payload can be: User address: a 64-bit user address mmap offset: 64-bit offset where region starts in the mapped memory + * vhost user log description + ----------------- + | size | offset | + ----------------- + + size: a 64-bit size + Offset: a 64-bit offset where log starts in the mapped memory + In QEMU the vhost-user message is implemented with the following struct: typedef struct VhostUserMsg { @@ -280,14 +288,18 @@ Message types Id: 6 Equivalent ioctl: VHOST_SET_LOG_BASE - Master payload: u64 + Master payload: - u64 if slave has not the VHOST_USER_PROTOCOL_F_LOG_SHMFD + protocol feature + - vhost user log if slave has the + VHOST_USER_PROTOCOL_F_LOG_SHMFD protocol feature Slave payload: N/A 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. + memory area provided in the message and the message reply is an + empty message (size of 0). * VHOST_USER_SET_LOG_FD diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index c443602..dcdfd40 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -206,11 +206,17 @@ 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.log.mmap_size = log->size, - .payload.log.mmap_offset = 0, - .size = sizeof(msg.payload.log), }; + if (shmfd) { + msg.payload.log.mmap_size = log->size; + msg.payload.log.mmap_offset = 0; + msg.size = sizeof(msg.payload.log); + } else { + msg.payload.u64 = base; + msg.size = sizeof(msg.payload.u64); + } + if (shmfd && log->fd != -1) { fds[fd_num++] = log->fd; } -- 2.1.4