From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id D73CBA04C8; Fri, 18 Sep 2020 13:24:38 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BE5F31D9D3; Fri, 18 Sep 2020 13:24:37 +0200 (CEST) Received: from baidu.com (mx21.baidu.com [220.181.3.85]) by dpdk.org (Postfix) with ESMTP id AE9621BEA1; Fri, 18 Sep 2020 13:24:35 +0200 (CEST) Received: from BJHW-Mail-Ex14.internal.baidu.com (unknown [10.127.64.37]) by Forcepoint Email with ESMTPS id EA9C8180EC6FF2D9222E; Fri, 18 Sep 2020 19:24:32 +0800 (CST) Received: from BJHW-Mail-Ex15.internal.baidu.com (10.127.64.38) by BJHW-Mail-Ex14.internal.baidu.com (10.127.64.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1979.3; Fri, 18 Sep 2020 19:24:32 +0800 Received: from BJHW-Mail-Ex15.internal.baidu.com ([100.100.100.38]) by BJHW-Mail-Ex15.internal.baidu.com ([100.100.100.38]) with mapi id 15.01.1979.006; Fri, 18 Sep 2020 19:24:32 +0800 From: "Li,Rongqing" To: "Loftus, Ciara" , "dev@dpdk.org" CC: "stable@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH] af_xdp: avoid deadlock due to empty fill queue Thread-Index: AQHWjMmOfi44bm2AAEaUOXMMBQXk4aluH9HggAAi0+A= Date: Fri, 18 Sep 2020 11:24:32 +0000 Message-ID: <59c2a003fd3542068a0c7ce228ba0a55@baidu.com> References: <1600330014-22019-1-git-send-email-lirongqing@baidu.com> <3450466f3f104aa29cdfc3a6c7828050@intel.com> In-Reply-To: <3450466f3f104aa29cdfc3a6c7828050@intel.com> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.22.198.16] x-baidu-bdmsfe-datecheck: 1_BJHW-Mail-Ex14_2020-09-18 19:24:32:886 Content-Type: text/plain; charset="utf-7" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH] af_xdp: avoid deadlock due to empty fill queue X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" +AD4- -----Original Message----- +AD4- From: Loftus, Ciara +AFs-mailto:ciara.loftus+AEA-intel.com+AF0- +AD4- Sent: Friday, September 18, 2020 5:27 PM +AD4- To: Li,Rongqing +ADw-lirongqing+AEA-baidu.com+AD4AOw- dev+AEA-dpdk.or= g +AD4- Cc: stable+AEA-dpdk.org +AD4- Subject: RE: +AFs-dpdk-dev+AF0- +AFs-PATCH+AF0- af+AF8-xdp: avoid dea= dlock due to empty fill queue +AD4-=20 +AD4- +AD4- when receive packets, it is possible to fail to reserve fill qu= eue, +AD4- +AD4- since buffer ring is shared between tx and rx, and maybe not av= ailable +AD4- +AD4- temporary. at last, both fill queue and rx queue are empty. +AD4- +AD4- +AD4- +AD4- then kernel side will be unable to receive packets due to empty= fill +AD4- +AD4- queue, and dpdk will be unable to reserve fill queue because dp= dk has +AD4- +AD4- not pakcets to receive, at last deadlock will happen +AD4- +AD4- +AD4- +AD4- so move reserve fill queue before xsk+AF8-ring+AF8-cons+AF8AXw-= peek to fix it +AD4- +AD4- +AD4- +AD4- Signed-off-by: Li RongQing +ADw-lirongqing+AEA-baidu.com+AD4- +AD4-=20 +AD4- Thanks for the fix. I tested and saw no significant performance drop. +AD4-=20 +AD4- Minor: the first line of the commit should read +ACI-net/af+AF8-xdp: = ....+ACI- +AD4-=20 +AD4- Acked-by: Ciara Loftus +ADw-ciara.loftus+AEA-intel.com+AD4- +AD4-=20 +AD4- CC-ing stable as I think this fix should be considered for inclusion. +AD4-=20 +AD4- Thanks, +AD4- Ciara +AD4-=20 Thanks, I will send v2 -Li +AD4- +AD4- --- +AD4- +AD4- drivers/net/af+AF8-xdp/rte+AF8-eth+AF8-af+AF8-xdp.c +AHw- 7 +-= +-+-+---- +AD4- +AD4- 1 file changed, 4 insertions(+-), 3 deletions(-) +AD4- +AD4- +AD4- +AD4- diff --git a/drivers/net/af+AF8-xdp/rte+AF8-eth+AF8-af+AF8-xdp.= c +AD4- +AD4- b/drivers/net/af+AF8-xdp/rte+AF8-eth+AF8-af+AF8-xdp.c +AD4- +AD4- index 7ce4ad04a..2dc9cab27 100644 +AD4- +AD4- --- a/drivers/net/af+AF8-xdp/rte+AF8-eth+AF8-af+AF8-xdp.c +AD4- +AD4- +-+-+- b/drivers/net/af+AF8-xdp/rte+AF8-eth+AF8-af+AF8-xdp.c +AD4- +AD4- +AEAAQA- -304,6 +-304,10 +AEAAQA- af+AF8-xdp+AF8-rx+AF8-cp(void= +ACo-queue, struct rte+AF8-mbuf +ACoAKg-bufs, +AD4- +AD4- uint16+AF8-t nb+AF8-pkts) +AD4- +AD4- uint32+AF8-t free+AF8-thresh +AD0- fq-+AD4-size +AD4APg- 1+AD= s- +AD4- +AD4- struct rte+AF8-mbuf +ACo-mbufs+AFs-ETH+AF8-AF+AF8-XDP+AF8-RX+= AF8-BATCH+AF8-SIZE+AF0AOw- +AD4- +AD4- +AD4- +AD4- +- if (xsk+AF8-prod+AF8-nb+AF8-free(fq, free+AF8-thresh) +AD4AP= Q- free+AF8-thresh) +AD4- +AD4- +- (void)reserve+AF8-fill+AF8-queue(umem, +AD4- +AD4- ETH+AF8-AF+AF8-XDP+AF8-RX+AF8-BATCH+AF8-SIZE, NULL)+ADs- +AD4- +AD4- +- +AD4- +AD4- +- +AD4- +AD4- if (unlikely(rte+AF8-pktmbuf+AF8-alloc+AF8-bulk(rxq-+AD4-mb+A= F8-pool, mbufs, nb+AF8-pkts) +ACEAPQ- +AD4- +AD4- 0)) +AD4- +AD4- return 0+ADs- +AD4- +AD4- +AD4- +AD4- +AEAAQA- -317,9 +-321,6 +AEAAQA- af+AF8-xdp+AF8-rx+AF8-cp(void = +ACo-queue, struct rte+AF8-mbuf +ACoAKg-bufs, +AD4- +AD4- uint16+AF8-t nb+AF8-pkts) +AD4- +AD4- goto out+ADs- +AD4- +AD4- +AH0- +AD4- +AD4- +AD4- +AD4- - if (xsk+AF8-prod+AF8-nb+AF8-free(fq, free+AF8-thresh) +AD4APQ= - free+AF8-thresh) +AD4- +AD4- - (void)reserve+AF8-fill+AF8-queue(umem, +AD4- +AD4- ETH+AF8-AF+AF8-XDP+AF8-RX+AF8-BATCH+AF8-SIZE, NULL)+ADs- +AD4- +AD4- - +AD4- +AD4- for (i +AD0- 0+ADs- i +ADw- rcvd+ADs- i+-+-) +AHs- +AD4- +AD4- const struct xdp+AF8-desc +ACo-desc+ADs- +AD4- +AD4- uint64+AF8-t addr+ADs- +AD4- +AD4- -- +AD4- +AD4- 2.16.2