From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 74F421B308; Thu, 18 Jan 2018 15:06:16 +0100 (CET) X-Amp-Result: UNSCANNABLE X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Jan 2018 06:06:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,377,1511856000"; d="scan'208";a="11580291" Received: from debian-xvivbkq.sh.intel.com ([10.67.104.226]) by orsmga006.jf.intel.com with ESMTP; 18 Jan 2018 06:06:14 -0800 Date: Thu, 18 Jan 2018 22:05:49 +0800 From: Tiwei Bie To: Olivier Matz Cc: dev@dpdk.org, Yuanhan Liu , Maxime Coquelin , stable@dpdk.org Message-ID: <20180118140549.tnqzaytw36grtaff@debian-xvivbkq.sh.intel.com> References: <20180118090733.12728-1-olivier.matz@6wind.com> <20180118090733.12728-3-olivier.matz@6wind.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20180118090733.12728-3-olivier.matz@6wind.com> User-Agent: NeoMutt/20170609 (1.8.3) Subject: Re: [dpdk-stable] [PATCH 2/3] net/virtio: rationalize queue flushing X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Jan 2018 14:06:17 -0000 On Thu, Jan 18, 2018 at 10:07:32AM +0100, Olivier Matz wrote: > Rationalize the function virtio_dev_free_mbufs(): > > - skip NULL vqs instead of crashing: this is required for the > next commit > - use the same kind of loop than in virtio_free_queues() > - also flush mbufs from the control queue (this is useless yet) > - factorize common code between rxq, txq, cq > > Cc: stable@dpdk.org > > Signed-off-by: Olivier Matz > --- > drivers/net/virtio/virtio_ethdev.c | 55 ++++++++++++++++++-------------------- > 1 file changed, 26 insertions(+), 29 deletions(-) > > diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c > index c7426951c..d8b3b8ed7 100644 > --- a/drivers/net/virtio/virtio_ethdev.c > +++ b/drivers/net/virtio/virtio_ethdev.c > @@ -1868,47 +1868,44 @@ virtio_dev_start(struct rte_eth_dev *dev) > > static void virtio_dev_free_mbufs(struct rte_eth_dev *dev) > { [...] > > - mbuf_num = 0; > - while ((buf = virtqueue_detach_unused(txvq->vq)) != NULL) { > + while ((buf = virtqueue_detach_unused(vq)) != NULL) { Thanks for working on this! The virtqueue_detach_unused() can't handle the vector Rx case correctly. Because vq->vq_descx[] is initialized for vector Rx, but isn't updated by the vector Rx. So together with the next commit, it may cause problems during dev_stop/dev_configure/dev_start if vector Rx is used. Thanks, Tiwei > rte_pktmbuf_free(buf); > mbuf_num++; > } > > - PMD_INIT_LOG(DEBUG, "free %d mbufs", mbuf_num); > PMD_INIT_LOG(DEBUG, > - "After freeing txq[%d] used and unused buf", i); > - VIRTQUEUE_DUMP(txvq->vq); > + "After freeing %s[%d] used and unused buf", > + type, i); > + VIRTQUEUE_DUMP(vq); > } > + > + PMD_INIT_LOG(DEBUG, "%d mbufs freed", mbuf_num); > } > > /* > -- > 2.11.0 >