From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <yuanhan.liu@linux.intel.com>
Received: from mga14.intel.com (mga14.intel.com [192.55.52.115])
 by dpdk.org (Postfix) with ESMTP id C78DBDE0;
 Mon,  5 Sep 2016 07:28:57 +0200 (CEST)
Received: from orsmga005.jf.intel.com ([10.7.209.41])
 by fmsmga103.fm.intel.com with ESMTP; 04 Sep 2016 22:28:56 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.30,285,1470726000"; 
   d="scan'208";a="4762020"
Received: from yliu-dev.sh.intel.com (HELO yliu-dev) ([10.239.67.162])
 by orsmga005.jf.intel.com with ESMTP; 04 Sep 2016 22:28:54 -0700
Date: Mon, 5 Sep 2016 13:40:51 +0800
From: Yuanhan Liu <yuanhan.liu@intel.com>
To: "Wang, Zhihong" <zhihong.wang@intel.com>
Cc: Yuanhan Liu <yuanhan.liu@linux.intel.com>, "dev@dpdk.org" <dev@dpdk.org>,
 "maxime.coquelin@redhat.com" <maxime.coquelin@redhat.com>,
 "thomas.monjalon@6wind.com" <thomas.monjalon@6wind.com>,
 "stable@dpdk.org" <stable@dpdk.org>
Message-ID: <20160905054051.GQ7328@yliu-dev.sh.intel.com>
References: <1471319402-112998-1-git-send-email-zhihong.wang@intel.com>
 <1472528164-54296-1-git-send-email-zhihong.wang@intel.com>
 <1472528164-54296-2-git-send-email-zhihong.wang@intel.com>
 <20160905052446.GP7328@yliu-dev.sh.intel.com>
 <8F6C2BD409508844A0EFC19955BE09414E70B93E@SHSMSX103.ccr.corp.intel.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <8F6C2BD409508844A0EFC19955BE09414E70B93E@SHSMSX103.ccr.corp.intel.com>
User-Agent: Mutt/1.5.23 (2014-03-12)
Subject: Re: [dpdk-dev] [dpdk-stable] [PATCH v4 1/6] vhost: fix windows vm
	hang
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Mon, 05 Sep 2016 05:28:58 -0000

On Mon, Sep 05, 2016 at 05:25:31AM +0000, Wang, Zhihong wrote:
> 
> 
> > -----Original Message-----
> > From: Yuanhan Liu [mailto:yuanhan.liu@linux.intel.com]
> > Sent: Monday, September 5, 2016 1:25 PM
> > To: Wang, Zhihong <zhihong.wang@intel.com>
> > Cc: dev@dpdk.org; maxime.coquelin@redhat.com;
> > yuanhan.liu@linux.intel.com; thomas.monjalon@6wind.com;
> > stable@dpdk.org
> > Subject: Re: [dpdk-stable] [PATCH v4 1/6] vhost: fix windows vm hang
> > 
> > On Mon, Aug 29, 2016 at 11:35:59PM -0400, Zhihong Wang wrote:
> > > This patch fixes a Windows VM compatibility issue in DPDK 16.07 vhost
> > code,
> > > which causes the guest to hang once any packets are enqueued when
> > mrg_rxbuf
> > > is turned on.
> > 
> > This commit log lacks two important pieces: why does the hang happen and
> > how does your patch fix it.
> 
> Okay, I'll add it in v5.
> 
> > 
> > > How to test?
> > >
> > >  1. Start testpmd in the host with a vhost port.
> > >
> > >  2. Start a Windows VM image with qemu and connect to the vhost port.
> > >
> > >  3. Start io forwarding with tx_first in host testpmd.
> > >
> > > For 16.07 code, the Windows VM will hang once any packets are enqueued.
> > >
> > > Cc: <stable@dpdk.org>
> > > Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
> > > ---
> > >  lib/librte_vhost/vhost_rxtx.c | 17 ++++++++++++-----
> > >  1 file changed, 12 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/lib/librte_vhost/vhost_rxtx.c b/lib/librte_vhost/vhost_rxtx.c
> > > index 08a73fd..5806f99 100644
> > > --- a/lib/librte_vhost/vhost_rxtx.c
> > > +++ b/lib/librte_vhost/vhost_rxtx.c
> > > @@ -384,6 +384,8 @@ copy_mbuf_to_desc_mergeable(struct virtio_net
> > *dev, struct vhost_virtqueue *vq,
> > >  	uint16_t start_idx = vq->last_used_idx;
> > >  	uint16_t cur_idx = start_idx;
> > >  	uint64_t desc_addr;
> > > +	uint32_t desc_chain_head;
> > > +	uint32_t desc_chain_len;
> > 
> > What's the point of introducing "desc_chain_len"? It has the same value
> > of desc_offset.
> 
> No it's not, desc_offset is the offset of the current desc only.
> That's where the old code goes wrong.

Oh, right.

	--yliu