From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxime Coquelin Subject: [RFC 1/2] vhost: add packed ring support to vring base requests Date: Wed, 8 Aug 2018 17:23:22 +0200 Message-ID: <20180808152323.9660-2-maxime.coquelin@redhat.com> References: <20180808152323.9660-1-maxime.coquelin@redhat.com> Cc: Maxime Coquelin To: dev@dpdk.org, tiwei.bie@intel.com, zhihong.wang@intel.com, jfreimann@redhat.com Return-path: Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by dpdk.org (Postfix) with ESMTP id BE8182BE2 for ; Wed, 8 Aug 2018 17:23:33 +0200 (CEST) In-Reply-To: <20180808152323.9660-1-maxime.coquelin@redhat.com> 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 --- lib/librte_vhost/vhost_user.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c index a2d4c9ffc..31cfdf163 100644 --- a/lib/librte_vhost/vhost_user.c +++ b/lib/librte_vhost/vhost_user.c @@ -648,10 +648,15 @@ static int vhost_user_set_vring_base(struct virtio_net *dev, VhostUserMsg *msg) { - 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 0; } @@ -1083,6 +1088,9 @@ vhost_user_get_vring_base(struct virtio_net *dev, /* 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); -- 2.17.1