From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 3E9094C99; Wed, 27 Feb 2019 11:10:35 +0100 (CET) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Feb 2019 02:10:34 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,419,1544515200"; d="scan'208";a="146954203" Received: from dpdk-tbie.sh.intel.com ([10.67.104.173]) by fmsmga002.fm.intel.com with ESMTP; 27 Feb 2019 02:10:34 -0800 Date: Wed, 27 Feb 2019 18:10:32 +0800 From: Tiwei Bie To: Maxime Coquelin Cc: dev@dpdk.org, stable@dpdk.org Message-ID: <20190227101032.GA32256@dpdk-tbie.sh.intel.com> References: <20190227085428.13666-1-maxime.coquelin@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20190227085428.13666-1-maxime.coquelin@redhat.com> User-Agent: Mutt/1.9.4 (2018-02-28) Subject: Re: [dpdk-stable] [PATCH] vhost: prevent disabled rings to be processed with zero-copy 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: Wed, 27 Feb 2019 10:10:36 -0000 On Wed, Feb 27, 2019 at 09:54:28AM +0100, Maxime Coquelin wrote: > The vhost-user spec says that once the vring is disabled, the > client has to stop processing it. But it can happen when > dequeue zero-copy is enabled if outstanding descriptors buffers > are still being processed by an extranl NIC or another guest. s/extranl/external/ > > The fix consists in draining the zmbufs list to ensure no more > descriptors buffers are in the wild. > > Note that this fix is only working in the case REPLY_ACK > protocol feature is enabled, which is not the case by default > for now (it is only enabled when IOMMU feature is enabled in > the vhost library). > > Fixes: b0a985d1f340 ("vhost: add dequeue zero copy") > Cc: stable@dpdk.org > > Signed-off-by: Maxime Coquelin > --- > lib/librte_vhost/vhost_user.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c > index 36c0c676d..ef947b90c 100644 > --- a/lib/librte_vhost/vhost_user.c > +++ b/lib/librte_vhost/vhost_user.c > @@ -1336,6 +1336,10 @@ vhost_user_set_vring_enable(struct virtio_net **pdev, > "set queue enable: %d to qp idx: %d\n", > enable, index); > > + /* On disable, rings have to be stopped being processed. */ > + if (!enable && dev->dequeue_zero_copy) > + drain_zmbuf_list(dev->virtqueue[index]); It might be better to drain the zmbufs list after calling application's vring_state_changed() callback, so there will be a chance for applications to take some actions first if they want. Overall this looks good to me, Reviewed-by: Tiwei Bie Thanks! Tiwei