From nobody Mon Sep 28 17:49:02 2026 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 44DD33515F1 for ; Wed, 19 Aug 2026 23:32:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787182345; cv=none; b=KJG6zutrb5gwVC2Q2IQJbEh7LMSViNdIzC+Udo9x3J5wLTmgzcXEz6gzPFzRk6FdXiroTgEKX9hlbCW37PSI5qeFxPBvyAPcqGvxWfzWCaYYIbKOPim1cZPYu3heDlcMjQbJJ2c8VxL+J4qtHBsPfudnKNkvPAOfrwtvYSy5/bA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787182345; c=relaxed/simple; bh=0IKdMwWw8MeoLI4HAXFOswTW0yNbMN9YDdEes+7tPUw=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=pKDl+Gtpa5sPhfqcTWcwKZgRBey/Fw6yPLqGUACIm6blg3fWk56waXxRzSERxgOvkpFQ8FwUSfGGRhXx5Y+EgV/7oi/PFCWMA498R2csJ/8VU+OTuh7borZDScT7PZMs5Dxt8gL1z5ptKX1ytxTpcFc08ZE9HZpgMHUqwYg4WfM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dama.to; spf=none smtp.mailfrom=dama.to; dkim=pass (2048-bit key) header.d=dama-to.20251104.gappssmtp.com header.i=@dama-to.20251104.gappssmtp.com header.b=FlDFAKv1; arc=none smtp.client-ip=209.85.216.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dama.to Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=dama.to Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=dama-to.20251104.gappssmtp.com header.i=@dama-to.20251104.gappssmtp.com header.b="FlDFAKv1" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-38dc69c74b8so2006823a91.0 for ; Wed, 19 Aug 2026 16:32:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dama-to.20251104.gappssmtp.com; s=20251104; t=1787182341; x=1787787141; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=QkfK+n4pBa8IvbBuEdCKRmANPwZqjt2vhK+NoTYINkg=; b=FlDFAKv15ooE3J6v61xuJsOC1B/oNdBj6waRKj6QpwuvnIedyEBAgAIB5W0J6xn8az ltcP0rTzzWBzaXai/Nqvuf4nQyGgWtsfQSdGtHInJ3d/jY7pdWUE4EYZ9b2S5NUKdzFb /HtUnAM61q03Zzg9bp60RtpX6fZ7DibxCEz7R5ZcBfbAtx3A77Mxld4o77t39FJlGwqi eHv/stTiOnSOVeKwDNk+tCT/Lk+3pF2UT0fuymUZSQeEC5w5lGK2tDicIlGSL143cdqN ao8W/ZuHIgdyEttZfyX1bckZ3l+uepa09taUUEZplHJA1V0RhRrfvOY9TjxaxfFpXjx3 j9Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787182341; x=1787787141; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=QkfK+n4pBa8IvbBuEdCKRmANPwZqjt2vhK+NoTYINkg=; b=f77ubYx1zj1Bpcqj6nwpsImCtFPdRhm5+OE7Ebak1sUdbOoesWPleU8GLg12HrcZA0 aSXW6Xl1cgWjzDDFYeL5cffzdPqwnEWNWb/JVaGQgrBmIev0nYW5yPwjlhSf1PKwNrKm ZJgX8P09ti6Fd0WR/j6hbbW0j+ri/g93RxGZX1mrwccbLrtAKoE5JuQdrODGBZPX/+ea grv5NMpoqSAvQgJn8E6GVxGokxerHZ3Dthxrj9uNWi2KZMKXjfeHas1NFPthVuPUN1D3 3iloCc/NahhmVIUHxXjQyErlmGvoiBZOV89ABFVmgmDC3Y4A5egdOztYH6rNZGXX+8yQ R5Ng== X-Forwarded-Encrypted: i=1; AHgh+RoiqlL2gm5+XXcXCn1ROfbeEmNftoMv1ntPIt3+M6ishLrxRoUSMQw+XMIP9OZBmAU2y+M3XIvSiXynfE0=@vger.kernel.org X-Gm-Message-State: AFuF++nnjRzzFdn5tCxY+j9Q2gnCgljwP100sVtkBeGSSsFvGxkpukN7 +W1B0tnSukWXZV6DQ/2kjOYFIJmx3gzZe/lYqUphBgD5913PEYzmm9HBeDHTxvGPetE= X-Gm-Gg: AR+sD13HXxhudhN0tyGLeWd4oshsrA83kTRv/kFPO9lN+WfZccCpaFaLvfnN2xq0Iz4 0wLVNqTvdIY5zUwS0lyvLcyIokqNbJUQ5Hdy/mytvuRORoSN9N+/LgaEAQD6PBpgqjUux0gmP+M 7kDsekeohmF5s+0TXenzPQrWgAwk49fDmdtYRloOsZbDWLuGwfgBp+1bBULjAfhPB3JnhI5KIzQ IRZK+UYTTMmNTMb5WsHWRYo2EGLerdIGa34hshfF56jfHyxJc4Wf04n22LepcWraKSTP3tMTBDc KJGYPvdVf2ts7uMaWKl8dMc/pwCddjKrlVg22JTZcvjZBzDr35cVz/draz+FO+lieYA904DywuK 0x6Gfmvf0pFhosMyNok0Y6tVWkzD6bLXo1VyYmOH//kqW7NKFsvOOW3GxV31o8aCruVXRisv5Rj A1NsVh+UFUlGV6YmktCBDsE522JK+/76H4sw/nfrOK1Fc= X-Received: by 2002:a17:90b:5484:b0:37d:f983:7b5 with SMTP id 98e67ed59e1d1-3958110cfc4mr15615141a91.9.1787182341460; Wed, 19 Aug 2026 16:32:21 -0700 (PDT) Received: from localhost ([2a03:2880:2ff:73::]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395ada67783sm39772a91.3.2026.08.19.16.32.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 16:32:20 -0700 (PDT) From: Joe Damato To: netdev@vger.kernel.org, Michael Chan , Pavan Chebbi , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Joe Damato Cc: horms@kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: [PATCH net v2] net: bnxt: ring the doorbell when SW USO exits early Date: Wed, 19 Aug 2026 16:32:11 -0700 Message-ID: <20260819233213.3673149-1-joe@dama.to> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When a burst of packets is handed down to the driver, the driver defers the doorbell to the end by setting txr->kick_pending =3D 1. The normal TX path handles this, but the SW USO path can miss it if it returns early. If bnxt_sw_udp_gso_xmit runs but returns early with NETDEV_TX_BUSY and txr->kick_pending was previously set to 1, then the TX queue can stall because the driver wrote some BDs but never wrote the doorbell. The device won't know to do the TX which would generate the completion that would wake the queue back up. Simplify bnxt_sw_udp_gso_xmit to set txr->kick_pending in its success case and check the flag on return. The added check after bnxt_sw_udp_gso_xmit returns ensures that any pending doorbells are written handling both successful USO and any early returns, which prevents the TX queue stall mentioned above. This TX queue stall was observed on a production system with a netdev TX watchdog informing about the queue stall. Fixes: cc5d90667db8 ("net: bnxt: Implement software USO") Cc: stable@vger.kernel.org Signed-off-by: Joe Damato Reviewed-by: Michael Chan --- v2: - Simplfy the patch as Michael suggested, setting txr->kick_pending in the USO code instead of exporting and calling bnxt_txr_db_kick. - Update commit message and remove stale comment. v1: https://lore.kernel.org/netdev/20260818211540.2991183-1-joe@dama.to/ drivers/net/ethernet/broadcom/bnxt/bnxt.c | 10 ++++++++-- drivers/net/ethernet/broadcom/bnxt/bnxt_gso.c | 4 +--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index 9377bf675981..d3cb25abb632 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -485,6 +485,7 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb,= struct net_device *dev) struct bnxt_sw_tx_bd *tx_buf; __le32 lflags =3D 0; skb_frag_t *frag; + netdev_tx_t ret; =20 i =3D skb_get_queue_mapping(skb); if (unlikely(i >=3D bp->tx_nr_rings)) { @@ -510,8 +511,13 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb= , struct net_device *dev) #endif if (skb_is_gso(skb) && (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) && - !(bp->flags & BNXT_FLAG_UDP_GSO_CAP)) - return bnxt_sw_udp_gso_xmit(bp, txr, txq, skb); + !(bp->flags & BNXT_FLAG_UDP_GSO_CAP)) { + ret =3D bnxt_sw_udp_gso_xmit(bp, txr, txq, skb); + if (txr->kick_pending) + bnxt_txr_db_kick(bp, txr, txr->tx_prod); + + return ret; + } =20 free_size =3D bnxt_tx_avail(bp, txr); if (unlikely(free_size < skb_shinfo(skb)->nr_frags + 2)) { diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_gso.c b/drivers/net/et= hernet/broadcom/bnxt/bnxt_gso.c index f317f60414e8..f7e18bea0fb8 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_gso.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_gso.c @@ -223,9 +223,7 @@ netdev_tx_t bnxt_sw_udp_gso_xmit(struct bnxt *bp, netdev_tx_sent_queue(txq, skb->len); =20 WRITE_ONCE(txr->tx_prod, prod); - /* Sync BDs before doorbell */ - wmb(); - bnxt_db_write(bp, &txr->tx_db, prod); + txr->kick_pending =3D 1; =20 if (unlikely(bnxt_tx_avail(bp, txr) <=3D bp->tx_wake_thresh)) netif_txq_try_stop(txq, bnxt_tx_avail(bp, txr), base-commit: 61eb236c41c2a4717015dff18016a75a5eb90052 --=20 2.53.0-Meta