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 3B631A054C for ; Fri, 14 Feb 2020 18:05:11 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3384CF72; Fri, 14 Feb 2020 18:05:11 +0100 (CET) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) by dpdk.org (Postfix) with ESMTP id EEB62F72 for ; Fri, 14 Feb 2020 18:05:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1581699909; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=SD63hvED2N0og5mXEcTLMYg7QltF2n6chHgZlnXpv8Y=; b=Xu5ofnPfNTWq6DEaTtpPZOdDyCQlamrncT6sNi91IHkqqfoq7yGUuDCd9yHLmp3LHpAfeR rHrgKxYo66w3IJ4cWFN6A4V4NJgDjRkAyL4NTpRvMF30++EHHvU7wo1Ja3FTIhh+3FSUhX 4KAGT17hi65WqXkDtRjb9PhYigIZ334= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-222-AZjjpOeTMAeLa2OdnP8KMA-1; Fri, 14 Feb 2020 12:05:05 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6FF66800D4E; Fri, 14 Feb 2020 17:05:04 +0000 (UTC) Received: from rh.redhat.com (unknown [10.33.36.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id D94658AC4B; Fri, 14 Feb 2020 17:05:01 +0000 (UTC) From: Kevin Traynor To: Rasesh Mody Cc: dpdk stable Date: Fri, 14 Feb 2020 17:03:15 +0000 Message-Id: <20200214170337.25093-21-ktraynor@redhat.com> In-Reply-To: <20200214170337.25093-1-ktraynor@redhat.com> References: <20200214170337.25093-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-MC-Unique: AZjjpOeTMAeLa2OdnP8KMA-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Subject: [dpdk-stable] patch 'net/bnx2x: fix to sync fastpath Rx queue access' has been queued to LTS release 18.11.7 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: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to LTS release 18.11.7 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 02/20/20. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasi= ng (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/kevintraynor/dpdk-stable-queue This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable-queue/commit/c7afc147a41e78e89a= 1f86f27337e35593d38cd0 Thanks. Kevin. --- >From c7afc147a41e78e89a1f86f27337e35593d38cd0 Mon Sep 17 00:00:00 2001 From: Rasesh Mody Date: Sun, 26 Jan 2020 14:54:19 -0800 Subject: [PATCH] net/bnx2x: fix to sync fastpath Rx queue access [ upstream commit 141c86f55f734c4f8b9ad3129b6e58807b5c4577 ] PMD handles fast path completions in the Rx handler and control path completions in the interrupt handler. They both are processing completions from the same fastpath completion queue. There is a potential for race condition when these two paths are processing the completions from the same queue and trying to updating Rx Producer. Add a fastpath Rx lock between these two paths to close this race. Fixes: 540a211084a7 ("bnx2x: driver core") Signed-off-by: Rasesh Mody --- drivers/net/bnx2x/bnx2x.c | 12 ++++++++++++ drivers/net/bnx2x/bnx2x.h | 3 +++ drivers/net/bnx2x/bnx2x_rxtx.c | 8 +++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c index ab18fe2e56..b217a9f655 100644 --- a/drivers/net/bnx2x/bnx2x.c +++ b/drivers/net/bnx2x/bnx2x.c @@ -1168,4 +1168,8 @@ static int bnx2x_has_rx_work(struct bnx2x_fastpath *f= p) =09=09 MAX_RCQ_ENTRIES(rxq))) =09=09rx_cq_cons_sb++; + +=09PMD_RX_LOG(DEBUG, "hw CQ cons =3D %d, sw CQ cons =3D %d", +=09=09 rx_cq_cons_sb, rxq->rx_cq_head); + =09return rxq->rx_cq_head !=3D rx_cq_cons_sb; } @@ -1250,7 +1254,10 @@ static uint8_t bnx2x_rxeof(struct bnx2x_softc *sc, s= truct bnx2x_fastpath *fp) =09uint16_t hw_cq_cons, sw_cq_cons, sw_cq_prod; =20 +=09rte_spinlock_lock(&(fp)->rx_mtx); + =09rxq =3D sc->rx_queues[fp->index]; =09if (!rxq) { =09=09PMD_RX_LOG(ERR, "RX queue %d is NULL", fp->index); +=09=09rte_spinlock_unlock(&(fp)->rx_mtx); =09=09return 0; =09} @@ -1322,7 +1329,12 @@ next_cqe: =09rxq->rx_cq_tail =3D sw_cq_prod; =20 +=09PMD_RX_LOG(DEBUG, "BD prod =3D %d, sw CQ prod =3D %d", +=09=09 bd_prod_fw, sw_cq_prod); + =09/* Update producers */ =09bnx2x_update_rx_prod(sc, fp, bd_prod_fw, sw_cq_prod); =20 +=09rte_spinlock_unlock(&(fp)->rx_mtx); + =09return sw_cq_cons !=3D hw_cq_cons; } diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h index ceaecb031f..fd49b9a3af 100644 --- a/drivers/net/bnx2x/bnx2x.h +++ b/drivers/net/bnx2x/bnx2x.h @@ -375,4 +375,7 @@ struct bnx2x_fastpath { =09struct bnx2x_softc *sc; =20 +=09/* Used to synchronize fastpath Rx access */ +=09rte_spinlock_t rx_mtx; + =09/* status block */ =09struct bnx2x_dma sb_dma; diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.= c index e5a2b25b56..71ebdf3f6b 100644 --- a/drivers/net/bnx2x/bnx2x_rxtx.c +++ b/drivers/net/bnx2x/bnx2x_rxtx.c @@ -345,4 +345,6 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts,= uint16_t nb_pkts) =09struct rte_mbuf *rx_mb =3D NULL; =20 +=09rte_spinlock_lock(&(fp)->rx_mtx); + =09hw_cq_cons =3D le16toh(*fp->rx_cq_cons_sb); =09if ((hw_cq_cons & USABLE_RCQ_ENTRIES_PER_PAGE) =3D=3D @@ -356,6 +358,8 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts,= uint16_t nb_pkts) =09sw_cq_prod =3D rxq->rx_cq_tail; =20 -=09if (sw_cq_cons =3D=3D hw_cq_cons) +=09if (sw_cq_cons =3D=3D hw_cq_cons) { +=09=09rte_spinlock_unlock(&(fp)->rx_mtx); =09=09return 0; +=09} =20 =09while (nb_rx < nb_pkts && sw_cq_cons !=3D hw_cq_cons) { @@ -438,4 +442,6 @@ next_rx: =09bnx2x_upd_rx_prod_fast(sc, fp, bd_prod, sw_cq_prod); =20 +=09rte_spinlock_unlock(&(fp)->rx_mtx); + =09return nb_rx; } --=20 2.21.1 --- Diff of the applied patch vs upstream commit (please double-check if non-= empty: --- --- -=092020-02-14 17:02:38.206272383 +0000 +++ 0021-net-bnx2x-fix-to-sync-fastpath-Rx-queue-access.patch=092020-02-14 = 17:02:36.983407271 +0000 @@ -1 +1 @@ -From 141c86f55f734c4f8b9ad3129b6e58807b5c4577 Mon Sep 17 00:00:00 2001 +From c7afc147a41e78e89a1f86f27337e35593d38cd0 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 141c86f55f734c4f8b9ad3129b6e58807b5c4577 ] + @@ -15 +16,0 @@ -Cc: stable@dpdk.org @@ -25 +26 @@ -index 50e289b286..0b4030e2b9 100644 +index ab18fe2e56..b217a9f655 100644 @@ -62 +63 @@ -index 3383c76759..1dbc98197d 100644 +index ceaecb031f..fd49b9a3af 100644 @@ -65 +66 @@ -@@ -361,4 +361,7 @@ struct bnx2x_fastpath { +@@ -375,4 +375,7 @@ struct bnx2x_fastpath { @@ -74 +75 @@ -index ae97dfee36..0d77035844 100644 +index e5a2b25b56..71ebdf3f6b 100644 @@ -77 +78 @@ -@@ -347,4 +347,6 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts= , uint16_t nb_pkts) +@@ -345,4 +345,6 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts= , uint16_t nb_pkts) @@ -84 +85 @@ -@@ -358,6 +360,8 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts= , uint16_t nb_pkts) +@@ -356,6 +358,8 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts= , uint16_t nb_pkts) @@ -94 +95 @@ -@@ -440,4 +444,6 @@ next_rx: +@@ -438,4 +442,6 @@ next_rx: