From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 853602B9C; Mon, 5 Sep 2016 07:25:35 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga101.fm.intel.com with ESMTP; 04 Sep 2016 22:25:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.30,285,1470726000"; d="scan'208";a="1045705852" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga002.jf.intel.com with ESMTP; 04 Sep 2016 22:25:34 -0700 Received: from fmsmsx102.amr.corp.intel.com (10.18.124.200) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.248.2; Sun, 4 Sep 2016 22:25:33 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by FMSMSX102.amr.corp.intel.com (10.18.124.200) with Microsoft SMTP Server (TLS) id 14.3.248.2; Sun, 4 Sep 2016 22:25:33 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.102]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.91]) with mapi id 14.03.0248.002; Mon, 5 Sep 2016 13:25:31 +0800 From: "Wang, Zhihong" To: Yuanhan Liu CC: "dev@dpdk.org" , "maxime.coquelin@redhat.com" , "thomas.monjalon@6wind.com" , "stable@dpdk.org" Thread-Topic: [dpdk-stable] [PATCH v4 1/6] vhost: fix windows vm hang Thread-Index: AQHSAqtug6rgKchBHEihoNGrOxwvO6Bp4C0AgACE55A= Date: Mon, 5 Sep 2016 05:25:31 +0000 Message-ID: <8F6C2BD409508844A0EFC19955BE09414E70B93E@SHSMSX103.ccr.corp.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> In-Reply-To: <20160905052446.GP7328@yliu-dev.sh.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 05 Sep 2016 05:25:36 -0000 > -----Original Message----- > From: Yuanhan Liu [mailto:yuanhan.liu@linux.intel.com] > Sent: Monday, September 5, 2016 1:25 PM > To: Wang, Zhihong > 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 >=20 > 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. >=20 > 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. >=20 > > 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: > > Signed-off-by: Zhihong Wang > > --- > > 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_rxt= x.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 =3D vq->last_used_idx; > > uint16_t cur_idx =3D start_idx; > > uint64_t desc_addr; > > + uint32_t desc_chain_head; > > + uint32_t desc_chain_len; >=20 > 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. If you take a look at the virtio spec: /* le32 is used here for ids for padding reasons. */ struct vring_used_elem { /* Index of start of used descriptor chain. */ le32 id; /* Total length of the descriptor chain which was written to. */ le32 len; }; >=20 > --yliu