From patchwork Tue Oct 2 13:30:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Coquelin X-Patchwork-Id: 45874 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 94A2F5B3A; Tue, 2 Oct 2018 15:30:35 +0200 (CEST) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id E57D6569B for ; Tue, 2 Oct 2018 15:30:33 +0200 (CEST) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1F26F308FB8D; Tue, 2 Oct 2018 13:30:33 +0000 (UTC) Received: from localhost.localdomain (ovpn-112-50.ams2.redhat.com [10.36.112.50]) by smtp.corp.redhat.com (Postfix) with ESMTP id 60D3A1C92C; Tue, 2 Oct 2018 13:30:31 +0000 (UTC) From: Maxime Coquelin To: dev@dpdk.org, jfreimann@redhat.com, tiwei.bie@intel.com, zhihong.wang@intel.com Cc: Maxime Coquelin Date: Tue, 2 Oct 2018 15:30:25 +0200 Message-Id: <20181002133026.21527-2-maxime.coquelin@redhat.com> In-Reply-To: <20181002133026.21527-1-maxime.coquelin@redhat.com> References: <20181002133026.21527-1-maxime.coquelin@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Tue, 02 Oct 2018 13:30:33 +0000 (UTC) Subject: [dpdk-dev] [PATCH 1/2] vhost: add packed ring support to vring base requests X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" For consistency with Vhost kernel backend, save the wrap counter value into bit 31 of num's vring state field. Signed-off-by: Maxime Coquelin Reviewed-by: Jens Freimann --- lib/librte_vhost/vhost_user.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c index 7ef3fb4a4..e671ed0ba 100644 --- a/lib/librte_vhost/vhost_user.c +++ b/lib/librte_vhost/vhost_user.c @@ -677,10 +677,16 @@ vhost_user_set_vring_base(struct virtio_net **pdev, struct VhostUserMsg *msg) { struct virtio_net *dev = *pdev; - dev->virtqueue[msg->payload.state.index]->last_used_idx = - msg->payload.state.num; - dev->virtqueue[msg->payload.state.index]->last_avail_idx = - msg->payload.state.num; + struct vhost_virtqueue *vq = dev->virtqueue[msg->payload.state.index]; + + if (dev->features & (1ULL << VIRTIO_F_RING_PACKED)) { + vq->avail_wrap_counter = msg->payload.state.num >> 31; + vq->used_wrap_counter = vq->avail_wrap_counter; + msg->payload.state.num &= ~(1 << 31); + } + + vq->last_used_idx = msg->payload.state.num; + vq->last_avail_idx = msg->payload.state.num; return VH_RESULT_OK; } @@ -1128,6 +1134,9 @@ vhost_user_get_vring_base(struct virtio_net **pdev, /* Here we are safe to get the last avail index */ msg->payload.state.num = vq->last_avail_idx; + if (dev->features & (1ULL << VIRTIO_F_RING_PACKED)) + msg->payload.state.num |= vq->avail_wrap_counter << 31; + RTE_LOG(INFO, VHOST_CONFIG, "vring base idx:%d file:%d\n", msg->payload.state.index, msg->payload.state.num);