From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tiwei Bie Subject: Re: [PATCH 07/17] net/virtio: implement transmit path for packed queues Date: Mon, 19 Mar 2018 17:04:43 +0800 Message-ID: <20180319090443.7f23v4m7h7wpuqih@debian> References: <20180316152120.13199-1-jfreimann@redhat.com> <20180316152120.13199-8-jfreimann@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Cc: dev@dpdk.org, yliu@fridaylinux.org, maxime.coquelin@redhat.com, mst@redhat.com To: Jens Freimann Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 8C17356A1 for ; Mon, 19 Mar 2018 10:06:20 +0100 (CET) Content-Disposition: inline In-Reply-To: <20180316152120.13199-8-jfreimann@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" On Fri, Mar 16, 2018 at 04:21:10PM +0100, Jens Freimann wrote: [...] > diff --git a/drivers/net/virtio/Makefile b/drivers/net/virtio/Makefile > index 6c2c996..aa1e600 100644 > --- a/drivers/net/virtio/Makefile > +++ b/drivers/net/virtio/Makefile > @@ -28,6 +28,7 @@ LIBABIVER := 1 > SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtqueue.c > SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio_pci.c > SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio_rxtx.c > +SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio_rxtx_1.1.c There is no need to introduce this file just for Tx. > SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio_ethdev.c > SRCS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio_rxtx_simple.c [...] > @@ -603,7 +605,8 @@ struct rte_virtio_xstats_name_off { > } > > vtpci_reset(hw); > - virtio_dev_free_mbufs(dev); > + if (!vtpci_packed_queue(hw)) > + virtio_dev_free_mbufs(dev); I think we also need to free mbufs for packed ring. > virtio_free_queues(hw); > } [...] > +/* Cleanup from completed transmits. */ > +static void > +virtio_xmit_cleanup(struct virtqueue *vq) > +{ > + uint16_t idx; > + uint16_t size = vq->vq_nentries; > + struct vring_desc_packed *desc = vq->vq_ring.desc_packed; > + > + idx = vq->vq_used_cons_idx & (size - 1); > + while (desc_is_used(&desc[idx]) && > + vq->vq_free_cnt < size) { > + while (desc[idx].flags & VRING_DESC_F_NEXT) { We can't use VRING_DESC_F_NEXT when handling used descriptors. Thanks