From nobody Fri Sep 25 18:52:25 2026 Received: from mail-pj1-f99.google.com (mail-pj1-f99.google.com [209.85.216.99]) (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 4CCDE2E7F20 for ; Tue, 22 Sep 2026 05:30:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.99 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790055047; cv=none; b=aHObWFPwtsxoMM3PGQd6E1RFxQQtilIT0nt/bDOpTQ5fZnnCCkWTjBNl1UyvRlgMzSOMDeSWaszVs4KmDJmjAInPajFJ37b6f2rSIueK6DX+nHmpRR/daM/XGFv7bGtwh5qrEvGb+rihDnXQVd23vklVQ3vreLS0HUo3Zmyk2m0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790055047; c=relaxed/simple; bh=xuxYnRMr0gJHNE+YhHEeh99xU9e2M8kDtnKD3F7vd2g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p8QSDIZk1i+z4jmhhkRBFGjU5bthcKJLMKkc5vm0Y0gJ3Ana6LQYBJ2AGr0cGQkCB+PLDn0mWsNejVJ8aUs8iTQ7lv1t2qbqC36ZGNkMCaxaCx7md9h8m5E7gkxtIng0nvzO+F6sHPiLrjBAR8Gdm27f+wAKKvMpRdZyx0Up44g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=hXx1f6aI; arc=none smtp.client-ip=209.85.216.99 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="hXx1f6aI" Received: by mail-pj1-f99.google.com with SMTP id 98e67ed59e1d1-3964e480f76so1954191a91.1 for ; Mon, 21 Sep 2026 22:30:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790055043; x=1790659843; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=HRZ3B1Ko8/WCM77tME79PUcj2CiBKcaRJ7ZjElWoLfY=; b=x0j3nmZBvJHM9Czvhtk/Dg4AbBa3nVuW0G8x6iSrbM8u3/DrfnLOdq08PS5Xy4P7vv 7WYALW6c1sOKAs0GVbhiwStDY42czADKNm49pQbTmWbMCBCSEeDaVqY1poLxWHxjvuvP SCG13SBn2loRTijNaKc2RWh0VqHTPYm9+TGiAeBQq/vKGlq8a213cd1yOvQZVCY2iFvM faJwXYR0VMHzshUnAw+YNBy4xU9PTkCZ46yjF/GrUaOySumnL4HiB15fEv8E4520RWwJ Riq50ukZz3sACAPUEcZmXAj80jJ7kPMmMphr/AP60iPEOlB2WChDx416VvKKQhTj+lcn Nsug== X-Forwarded-Encrypted: i=1; AKwUvBxqblLpO6s80EY4sGmxVVrxQRaeVp5t5BVTmOgse5g1H8s1IPttEgRCrypZfx0ht4H/ovoJmv7n99fqt2U=@vger.kernel.org X-Gm-Message-State: AFuF++kM+3AApNiOjr4TnouGGBcs/EmfgRK+MREi7BGqK4UMuyx0LVdr vcec+kgPHR132MEoferd+T2LDsLqUZ921BgwQrUnmgoBOVG988l4+3LJlNkTj5C8wyGOLgqYsA1 pe5QFcWHr1gTk1+GE7tij4M7qz3ERBupVrsfZTL0Pjt+qxinpmHnakcCdkZXsLRHN7RUXIcwSFU 54gb0Lm18dEOCvq4GhqOUSiS7ENxhy9ua583YVQ9+wkH7zMYrm0Wx7ZMnRVeWHXICfBwJ1dMC78 DJwUGDnC2ajCL/h0mfr7HnF3Q== X-Gm-Gg: AYBFou0gls3ZvlIJs8QVTdfvr3vFILroJypDRCOoOwoFxNA5X4JCvQUZzhGj/aw4HJO jqIXsPkzqiblN9oYlavr74Mq5G9lu4Ytv02we6NNyEL874HdOhZfAfcSKIPpI9FhYeDq7W0o88B 7y/zcAlJTIPbJe+XRcf4BZzCV/CiBupP+mcpTwlDvX7VYo98y09MzuPlmCpHDIxSyfOFYRbOaj4 PpPMLD2ALY0gc0Dum8hYlkOdlyiTVQDqVtEPui6M9rTitn0PuRKS5klaYuNPY86X18hECbJZBND ZcLB1RnapBpJzJo0QgJ96esjZkJjtMjfuRSTLtA1vINZkA3Q5+8kMvyOzXkh++rkbqO/Dy027T+ tga02Ct3SbMKIQYwe4lim6kGaul+fEdZneiZLGqpQ1fOEtdP5Gkj3o/p7h4tTPSlvkg6dhDUcb1 7w67Iq+lWg8R5IBOgjGzeskbkN0lQxLGHUc1CUbdj9YTru X-Received: by 2002:a17:90b:4483:b0:39d:eda9:febf with SMTP id 98e67ed59e1d1-3a0730d295emr62988a91.18.1790055042599; Mon, 21 Sep 2026 22:30:42 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-125.dlp.protect.broadcom.com. [144.49.247.125]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-3a066cbc29asm994367a91.5.2026.09.21.22.30.42 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Sep 2026 22:30:42 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-39e3c10ac70so9298511a91.2 for ; Mon, 21 Sep 2026 22:30:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1790055041; x=1790659841; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=HRZ3B1Ko8/WCM77tME79PUcj2CiBKcaRJ7ZjElWoLfY=; b=hXx1f6aIHcDMMQHE8rrNb3gKfRcSg/UQT/606ZNbsmRMTmSDDgsFBDj35dILHQMtS8 1Wj5GZtvVjZpzxNOrLjaOL/CxaUehyVvNOQHzsFwV9iSnrPvpAPpGRv051Dd59NcQuwb YXrlTMM8Lqb07gPAD61j/poNGGTmjRQOfcTnk= X-Forwarded-Encrypted: i=1; AKwUvBwzVzFtzC2ACL2NIf1j3aDf+x0/QluVtpk8/6zFvEj5wyBaIBDnuuG+6+K0Y6PImhAe5U+yPe7yX/0y/LA=@vger.kernel.org X-Received: by 2002:a17:90b:3143:b0:39e:21a7:5dff with SMTP id 98e67ed59e1d1-3a07309d174mr70321a91.11.1790055040713; Mon, 21 Sep 2026 22:30:40 -0700 (PDT) X-Received: by 2002:a17:90b:3143:b0:39e:21a7:5dff with SMTP id 98e67ed59e1d1-3a07309d174mr70300a91.11.1790055040290; Mon, 21 Sep 2026 22:30:40 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-144f29dc903sm2029025c88.3.2026.09.21.22.30.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 22:30:39 -0700 (PDT) From: Bhargava Marreddy To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, vsrama-krishna.nemani@broadcom.com, vikas.gupta@broadcom.com, Bhargava Marreddy , Rajashekar Hudumula Subject: [PATCH net-next v2 1/6] bnge: Extract bnapi allocation and cleanup into helpers Date: Tue, 22 Sep 2026 10:58:59 +0530 Message-ID: <20260922052904.59237-2-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260922052904.59237-1-bhargava.marreddy@broadcom.com> References: <20260922052904.59237-1-bhargava.marreddy@broadcom.com> 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 X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e Content-Type: text/plain; charset="utf-8" Factor bn->bnapi allocation and free logic out of bnge_{alloc,free}_core() into new bnge_{alloc,free}_bnapi_mem() helpers. Prepare the driver to move bnapi allocation out of the open/close path, and add NULL guards for rx_ring and tx_ring in core driver cleanup paths. Signed-off-by: Bhargava Marreddy Reviewed-by: Vikas Gupta Reviewed-by: Rajashekar Hudumula --- .../net/ethernet/broadcom/bnge/bnge_netdev.c | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net= /ethernet/broadcom/bnge/bnge_netdev.c index a4288f0258f8..c1810a309888 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c @@ -825,6 +825,9 @@ static void bnge_free_tpa_info(struct bnge_net *bn) struct bnge_dev *bd =3D bn->bd; int i, j; =20 + if (!bn->rx_ring) + return; + for (i =3D 0; i < bd->rx_nr_rings; i++) { struct bnge_rx_ring_info *rxr =3D &bn->rx_ring[i]; =20 @@ -881,6 +884,9 @@ static void bnge_free_rx_rings(struct bnge_net *bn) struct bnge_dev *bd =3D bn->bd; int i; =20 + if (!bn->rx_ring) + return; + bnge_free_tpa_info(bn); for (i =3D 0; i < bd->rx_nr_rings; i++) { struct bnge_rx_ring_info *rxr =3D &bn->rx_ring[i]; @@ -1024,6 +1030,9 @@ static void bnge_free_tx_rings(struct bnge_net *bn) struct bnge_dev *bd =3D bn->bd; int i; =20 + if (!bn->tx_ring) + return; + for (i =3D 0; i < bd->tx_nr_rings; i++) { struct bnge_tx_ring_info *txr =3D &bn->tx_ring[i]; struct bnge_ring_struct *ring; @@ -1195,6 +1204,12 @@ static int bnge_init_ring_grps(struct bnge_net *bn) return 0; } =20 +static void bnge_free_bnapi_mem(struct bnge_net *bn) +{ + kfree(bn->bnapi); + bn->bnapi =3D NULL; +} + static void bnge_free_core(struct bnge_net *bn) { bnge_free_vnic_attributes(bn); @@ -1211,15 +1226,13 @@ static void bnge_free_core(struct bnge_net *bn) bn->tx_ring =3D NULL; kfree(bn->rx_ring); bn->rx_ring =3D NULL; - kfree(bn->bnapi); - bn->bnapi =3D NULL; + bnge_free_bnapi_mem(bn); } =20 -static int bnge_alloc_core(struct bnge_net *bn) +static int bnge_alloc_bnapi_mem(struct bnge_net *bn) { struct bnge_dev *bd =3D bn->bd; - int i, j, size, arr_size; - int rc =3D -ENOMEM; + int i, size, arr_size; void *bnapi; =20 arr_size =3D L1_CACHE_ALIGN(sizeof(struct bnge_napi *) * @@ -1227,7 +1240,7 @@ static int bnge_alloc_core(struct bnge_net *bn) size =3D L1_CACHE_ALIGN(sizeof(struct bnge_napi)); bnapi =3D kzalloc(arr_size + size * bd->nq_nr_rings, GFP_KERNEL); if (!bnapi) - return rc; + return -ENOMEM; =20 bn->bnapi =3D bnapi; bnapi +=3D arr_size; @@ -1241,6 +1254,19 @@ static int bnge_alloc_core(struct bnge_net *bn) nqr->ring_struct.ring_mem.flags =3D BNGE_RMEM_RING_PTE_FLAG; } =20 + return 0; +} + +static int bnge_alloc_core(struct bnge_net *bn) +{ + struct bnge_dev *bd =3D bn->bd; + int i, j, rc; + + rc =3D bnge_alloc_bnapi_mem(bn); + if (rc) + return rc; + + rc =3D -ENOMEM; bn->rx_ring =3D kzalloc_objs(struct bnge_rx_ring_info, bd->rx_nr_rings); if (!bn->rx_ring) goto err_free_core; --=20 2.47.3 From nobody Fri Sep 25 18:52:25 2026 Received: from mail-pj1-f99.google.com (mail-pj1-f99.google.com [209.85.216.99]) (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 21DE43F9265 for ; Tue, 22 Sep 2026 05:30:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.99 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790055054; cv=none; b=IVjdqyfd2IbJSAX8xzMPv7JCiBurYE1zpfhz9Ma/bn2SwZGa+Cpf1QO8cemuU5YscU0eNtXwYnzYpy18wGh8o51/h/nzsWDqcjfUveUSme8Ngc+PU7k0ic2B1USv4J/Vy7m37lxks5/iM5tUVQiM4jGK1K5LIW6rIf10TNOrda8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790055054; c=relaxed/simple; bh=KYfDz4uPRl/aivTit7YIOz1bsaw8pDpD4HjGCtQ0P+c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sNHWCCQraB5KT4hEgSf+tt3rdgItndfLqlAineEyNDrOqZHhkYsTWdV9O6Ay9aywn/hQImCNN1x6hwHYIfuguSFsC5aLFV2wWq90qXUI4VEUSAurQFmIFLn0zlCdtUGORGJ507iDa+lNtsrtop2QyMht/8Aeca+qn/kpjIjBUXU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=ff07VFSo; arc=none smtp.client-ip=209.85.216.99 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="ff07VFSo" Received: by mail-pj1-f99.google.com with SMTP id 98e67ed59e1d1-39682983a0fso1291268a91.3 for ; Mon, 21 Sep 2026 22:30:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790055049; x=1790659849; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=xP65CtudS7JRVRE1w/xpvlIe7/T3zxfhNqXK5442s84=; b=xZvYbUpE5MctrU+JrdbBPhzyA86lw7CeQfe976UEhZD9KNUZI+d0DUA+DbXkxxHCQF 4Msj7wZUus2eEHKxP8EHFnrH4W09P8cWu2kgWsu24oD2Vmn6T3Qwbv8EPl3i80OY/rLI loYkQI+RVwJcQu5SGh14G7sD4ney3PNeyiGGmDLy/RFXxRCqJQUfFNuT3fjaYF+gK0pH 2nTwtxNh8C2GuQYCnERZgSHOzqliwR+iyjfyeaabjKUaw8UFsRJXLaRC0J6OQixsaH8C 2EHhmTKgkGUAE6231alDGRJJJfPOb2sVSZsVcqN3UwLceCXKYRyQnAaCGgpy0iNul+LT X6VQ== X-Forwarded-Encrypted: i=1; AKwUvBxmlGLCG2DLJH9nMJxhyB6JlAf6dpFebp6UIWz5GxTxRq3KwVke++4FC2v7FbyK6H+cu+ETZAdVIw64CdU=@vger.kernel.org X-Gm-Message-State: AFuF++lJBJWD9DMkNtBSgplozjvMwMcOZGPhtXxUU4wSmJqB19vf1Bg1 3t4kAP5BXtpWVlWhVVLvd5D/I7Mnw7ePLUJrCkb6WtfCNQK/rxidgoLycdq+nzAAI5FVGoO2+gq dz+2JrT5rLVnD0I4eHQZt0bS7VTUEX1t8BrAvXvIu9hoWgDbTW3sWYzCeeCJWNz8dlqk97wQItW agE13C2Or430eIH3bEA8shdKwlLufP46ji3Cc7sN/dx/A3ogRfG5+zzEowBJIbFTmge/sZPD+R6 /BiTgA8zD/pvvv7QUNIissZ1g== X-Gm-Gg: AYBFou2gj69RaVlBm8B+ffs0W/aMRIxFqYBh3lyl3pAIAw4UOmXvtVlw12sTKRxvVvP 8aaRgapJch4Fs0dzReNc6sYPwFL3tSiS2IZB6S1oMfSjcRGwmhTxrMUHzSZbavW28lK2p3+t21j QUnsUMfjyRsweSzNxyL89iVUSGE4JKyzujHSzCzz1MBkhrueEimwrAJCRrLVz1FfrADNgXw/7fx GakzWPHZSY+rKi07ReRKSaFJoN2z8gZng7ps9dCLoj9AqYkWWBvoyMrSXqDfz0JmxOjXdSsOpf3 W7BcNyv9hVLQ9CUNjmauAiie6SjrTOfnv3qKOjxzRg8Fg9ckJ06t7neVZHXQB9wP+jH0bgAIV4I b9us+6dkwYkEsESLQ3aZZ99FFmqF0R//IpevAwqgVlPtsDs2AfcONNan6HhUXG30oYrr/I4/aDo PPAwUMT5dHeUzopQ9ytVVBiGPYtCUHg6xH7PqenUptRw== X-Received: by 2002:a17:90b:4a41:b0:39e:6a81:5a94 with SMTP id 98e67ed59e1d1-3a073295a8fmr34424a91.40.1790055048743; Mon, 21 Sep 2026 22:30:48 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-22.dlp.protect.broadcom.com. [144.49.247.22]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-3a06e525b2dsm468841a91.8.2026.09.21.22.30.48 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Sep 2026 22:30:48 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-38ea32e57e2so6968844a91.1 for ; Mon, 21 Sep 2026 22:30:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1790055047; x=1790659847; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=xP65CtudS7JRVRE1w/xpvlIe7/T3zxfhNqXK5442s84=; b=ff07VFSoXNfz4JVykkbYDL8N7w4mv7ATyhW+3x9Kd+O/npFxObgff+dXX3AZxbCEN0 JSufW9A2IUBrXG6uOD/Q2fZjORZg5j/M77H52cGxk1F8FGZZgTt78YBBs4TiWfH65F8/ MkFOY5qzszhiSQvXr28f2XOhFQeoN2kvsuji8= X-Forwarded-Encrypted: i=1; AKwUvBwtgdvXT4XUQOUz6xdx7orv34PscdhwcvsAtaV1LrkxWHdP0NsJ3hIKZPP8TKyREkwvmyxBrWDiYSAd9yU=@vger.kernel.org X-Received: by 2002:a17:90b:390e:b0:39e:433:23b5 with SMTP id 98e67ed59e1d1-3a07314f59amr50516a91.5.1790055046794; Mon, 21 Sep 2026 22:30:46 -0700 (PDT) X-Received: by 2002:a17:90b:390e:b0:39e:433:23b5 with SMTP id 98e67ed59e1d1-3a07314f59amr50480a91.5.1790055046261; Mon, 21 Sep 2026 22:30:46 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-144f29dc903sm2029025c88.3.2026.09.21.22.30.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 22:30:45 -0700 (PDT) From: Bhargava Marreddy To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, vsrama-krishna.nemani@broadcom.com, vikas.gupta@broadcom.com, Bhargava Marreddy , Dharmender Garg , Akhilesh Samineni Subject: [PATCH net-next v2 2/6] bnge: Extract per-NQ ring allocation and init helpers Date: Tue, 22 Sep 2026 10:59:00 +0530 Message-ID: <20260922052904.59237-3-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260922052904.59237-1-bhargava.marreddy@broadcom.com> References: <20260922052904.59237-1-bhargava.marreddy@broadcom.com> 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 X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e Content-Type: text/plain; charset="utf-8" Factor the per-NQ loop body in bnge_hwrm_ring_alloc() and bnge_init_ring_struct() into standalone bnge_hwrm_nq_ring_alloc() and bnge_init_nq_ring_struct() helpers. This is a pure refactor with no functional changes, preparing NQ0 setup to run independently during probe rather than through the open path loop. Signed-off-by: Bhargava Marreddy Reviewed-by: Dharmender Garg Reviewed-by: Vikas Gupta Reviewed-by: Akhilesh Samineni --- .../net/ethernet/broadcom/bnge/bnge_netdev.c | 60 ++++++++++++------- .../net/ethernet/broadcom/bnge/bnge_rmem.c | 25 +++++--- .../net/ethernet/broadcom/bnge/bnge_rmem.h | 4 +- 3 files changed, 56 insertions(+), 33 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net= /ethernet/broadcom/bnge/bnge_netdev.c index c1810a309888..dfd68b830ded 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c @@ -1918,6 +1918,41 @@ static int bnge_hwrm_rx_ring_alloc(struct bnge_net *= bn, return 0; } =20 +static int bnge_hwrm_nq_ring_alloc(struct bnge_net *bn, int index) +{ + struct bnge_napi *bnapi =3D bn->bnapi[index]; + struct bnge_nq_ring_info *nqr; + struct bnge_ring_struct *ring; + u32 type =3D HWRM_RING_ALLOC_NQ; + struct bnge_dev *bd =3D bn->bd; + unsigned int vector; + u32 map_idx; + int rc; + + nqr =3D &bnapi->nq_ring; + ring =3D &nqr->ring_struct; + map_idx =3D ring->map_idx; + vector =3D bd->irq_tbl[map_idx].vector; + + disable_irq_nosync(vector); + rc =3D hwrm_ring_alloc_send_msg(bn, ring, type, map_idx); + if (rc) { + enable_irq(vector); + return rc; + } + bnge_set_db(bn, &nqr->nq_db, type, map_idx, ring->fw_ring_id); + bnge_db_nq(bn, &nqr->nq_db, nqr->nq_raw_cons); + enable_irq(vector); + bn->grp_info[index].nq_fw_ring_id =3D (u16)ring->fw_ring_id; + if (!index) { + rc =3D bnge_hwrm_set_async_event_cr(bd, ring->fw_ring_id); + if (rc) + netdev_warn(bn->netdev, "Failed to set async event completion ring.\n"); + } + + return 0; +} + static int bnge_hwrm_ring_alloc(struct bnge_net *bn) { struct bnge_dev *bd =3D bn->bd; @@ -1926,30 +1961,9 @@ static int bnge_hwrm_ring_alloc(struct bnge_net *bn) =20 agg_rings =3D !!(bnge_is_agg_reqd(bd)); for (i =3D 0; i < bd->nq_nr_rings; i++) { - struct bnge_napi *bnapi =3D bn->bnapi[i]; - struct bnge_nq_ring_info *nqr =3D &bnapi->nq_ring; - struct bnge_ring_struct *ring =3D &nqr->ring_struct; - u32 type =3D HWRM_RING_ALLOC_NQ; - u32 map_idx =3D ring->map_idx; - unsigned int vector; - - vector =3D bd->irq_tbl[map_idx].vector; - disable_irq_nosync(vector); - rc =3D hwrm_ring_alloc_send_msg(bn, ring, type, map_idx); - if (rc) { - enable_irq(vector); + rc =3D bnge_hwrm_nq_ring_alloc(bn, i); + if (rc) goto err_out; - } - bnge_set_db(bn, &nqr->nq_db, type, map_idx, ring->fw_ring_id); - bnge_db_nq(bn, &nqr->nq_db, nqr->nq_raw_cons); - enable_irq(vector); - bn->grp_info[i].nq_fw_ring_id =3D (u16)ring->fw_ring_id; - - if (!i) { - rc =3D bnge_hwrm_set_async_event_cr(bd, ring->fw_ring_id); - if (rc) - netdev_warn(bn->netdev, "Failed to set async event completion ring.\n"= ); - } } =20 for (i =3D 0; i < bd->tx_nr_rings; i++) { diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c b/drivers/net/e= thernet/broadcom/bnge/bnge_rmem.c index b066ee887a09..e0ddb2800c54 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c @@ -423,6 +423,21 @@ int bnge_alloc_ctx_mem(struct bnge_dev *bd) return 0; } =20 +void bnge_init_nq_ring_struct(struct bnge_net *bn, + struct bnge_nq_ring_info *nqr) +{ + struct bnge_ring_mem_info *rmem; + struct bnge_ring_struct *ring; + + ring =3D &nqr->ring_struct; + rmem =3D &ring->ring_mem; + rmem->nr_pages =3D bn->cp_nr_pages; + rmem->page_size =3D HW_CMPD_RING_SIZE; + rmem->pg_arr =3D (void **)nqr->desc_ring; + rmem->dma_arr =3D nqr->desc_mapping; + rmem->vmem_size =3D 0; +} + void bnge_init_ring_struct(struct bnge_net *bn) { struct bnge_dev *bd =3D bn->bd; @@ -431,19 +446,11 @@ void bnge_init_ring_struct(struct bnge_net *bn) for (i =3D 0; i < bd->nq_nr_rings; i++) { struct bnge_napi *bnapi =3D bn->bnapi[i]; struct bnge_ring_mem_info *rmem; - struct bnge_nq_ring_info *nqr; struct bnge_rx_ring_info *rxr; struct bnge_tx_ring_info *txr; struct bnge_ring_struct *ring; =20 - nqr =3D &bnapi->nq_ring; - ring =3D &nqr->ring_struct; - rmem =3D &ring->ring_mem; - rmem->nr_pages =3D bn->cp_nr_pages; - rmem->page_size =3D HW_CMPD_RING_SIZE; - rmem->pg_arr =3D (void **)nqr->desc_ring; - rmem->dma_arr =3D nqr->desc_mapping; - rmem->vmem_size =3D 0; + bnge_init_nq_ring_struct(bn, &bnapi->nq_ring); =20 rxr =3D bnapi->rx_ring; if (!rxr) diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.h b/drivers/net/e= thernet/broadcom/bnge/bnge_rmem.h index bb0c79a1ee60..a5a1d346ac93 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.h +++ b/drivers/net/ethernet/broadcom/bnge/bnge_rmem.h @@ -7,6 +7,7 @@ struct bnge_ctx_mem_type; struct bnge_dev; struct bnge_net; +struct bnge_nq_ring_info; =20 #define PTU_PTE_VALID 0x1UL #define PTU_PTE_LAST 0x2UL @@ -198,5 +199,6 @@ void bnge_free_ring(struct bnge_dev *bd, struct bnge_ri= ng_mem_info *rmem); int bnge_alloc_ctx_mem(struct bnge_dev *bd); void bnge_free_ctx_mem(struct bnge_dev *bd); void bnge_init_ring_struct(struct bnge_net *bn); - +void bnge_init_nq_ring_struct(struct bnge_net *bn, + struct bnge_nq_ring_info *nqr); #endif /* _BNGE_RMEM_H_ */ --=20 2.47.3 From nobody Fri Sep 25 18:52:25 2026 Received: from mail-pl1-f226.google.com (mail-pl1-f226.google.com [209.85.214.226]) (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 89BBA38423B for ; Tue, 22 Sep 2026 05:30:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790055063; cv=none; b=rV75q9/5vVo8VJghX1a+l2txHzMSnt0uPUCOEqnvcrbFY7mBv8xDaZqfr84giOHAZOjQHwhrPSNyF3djMkUUYTfuyyOQnnS1B+36dvPFhEAxIbTvemD9HBBmcS1k8yZRdnPkGwWBcvg/4/LROVM2A8Z33ddzJHsJRwiiJNxFYKI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790055063; c=relaxed/simple; bh=R9W+C7rd8vsQ9s4brAJxxgTCT73+HardaBeiuIRGQm8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QeUm8IqC5N8y38bOeLqmbQb5HCUQg+tvi1mDZYoY/IVjLEdZjanD/x6vP9P2IEIWh3O4VLsEIlURyTIbxGBeA9TnvE9C+nUyL6Wj4THjWq7WwTn0C5xpKbGsT6tezvK7W7TanKqAWZNkVs+T7LLp4TfeqUyALQo0mwQYDf3dli0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=UtEikXG5; arc=none smtp.client-ip=209.85.214.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="UtEikXG5" Received: by mail-pl1-f226.google.com with SMTP id d9443c01a7336-2dcff8f44f2so26769005ad.1 for ; Mon, 21 Sep 2026 22:30:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790055055; x=1790659855; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=0VxH32e4VrZZVOWi9fyj9drLBeVlGptObkrNS0hqXwg=; b=MRwFk6TlqSjPSNCGhcLwa9eVQGVF7UymC6GOX9LMoWN6fQu3/c5oUrcqmNieB2h76f jabM3TqB0KN3jG3v6A/7Zugl2ikNtmiaO2EpZo7a1zhf83t1XFr9na9fzzUepSzJ5LDl dJ+b3Xkjgtqu1KJTjaMtu6657r6YlClfms2narSE0XewoSZJK4TD8yezBurXuKU6rzth 0HOJVauxml7q2bnMk1cr3/t+bKJF0ZSsq/K33A4x0UNRPZqNtB3sChuA3I0z7gNmm9oe AR0o85qGxZfEqlzGk3ey+2ohbKrdCKjkg+/F+od7PTOhv9LEDbHcKFY+PdIi0YJDxfbO 3BAQ== X-Forwarded-Encrypted: i=1; AKwUvBzJTaNGaIYwThRww8qiBs5zxg+ibAJFm9ZNUex5relzlqPLwp9alJrvvCuhowYaCnp97jDIHvAx/RViKto=@vger.kernel.org X-Gm-Message-State: AFuF++kebLGrwRw3nxwwOYRNtbdyo+cMmRSZxm3AGQyqi3o6YFuus7X6 StQG+esfQbs6RZdYYTIGH+8z5UAm7gGOo3wuzJ4ii6OLZ+h6tvenTPpJ0C45+9VCkD/7e/XXaSO +GCwvnnj1FX1+ldhBaV6HcQCgJLDFvc4JcLYWDtXZeo3e8GU0zEO7HTXNKRf+kC6YVNXnANSMtH 0p4i8iHX2Y2d8nsvW4v2keDzf6VwMtQoJ0ZlyYwQLwkhr2vPs57BvdCQuHedX12Eywy7/5YUg4h OG7RnIt5HbvC7YPfqERVr7ooA== X-Gm-Gg: AYBFou17RTPxBohuS/d1nDgQSSrgly70YgNb7XIeb9vQp7Re2DRPl0mnhkFkD+2M1vZ Xz2v9D4bJtNivWnVHWHM4E3IGev+WAyKdwDRuWYAg7VjJ0aBwBr8Djpy0LzbzGyv5duv0Jd1M9x eoLgrGogd5dtfiyxssV9CW1QjO0YnmSJXHwT6C3q7YVMYa/4GajbQQweA5w7mvzKoW2brLmu0L+ YsDlQQ+9uVEx+qkomHmfCh88nxtjTf2tIVWVYfLPp68vP3sfcf+630hxO6+nNgZy31wOeHKdwfS GgYNpE03C1fwcVCggbJhR02lC0SVSTJfaZsdQl752qb4dmVDs4gqq5mVV4agxP4uuKpt6sSc9y7 ansQzHIhWMZRJ2NocMDcivhRszt54iiGJKPKSW0SI/1LesNNTM/Jkbz/d0MJHUbZikZXYKloOm8 YuTL8Hc8KBHs04LlStJrXnE23TwiidXpXbuNAxLjLkow== X-Received: by 2002:a17:903:2985:b0:2dd:c100:313f with SMTP id d9443c01a7336-2df60b93185mr402565ad.59.1790055055161; Mon, 21 Sep 2026 22:30:55 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-25.dlp.protect.broadcom.com. [144.49.247.25]) by smtp-relay.gmail.com with ESMTPS id d9443c01a7336-2df5d02be81sm533815ad.26.2026.09.21.22.30.54 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Sep 2026 22:30:55 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-398dcfabbf8so12158483a91.0 for ; Mon, 21 Sep 2026 22:30:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1790055053; x=1790659853; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=0VxH32e4VrZZVOWi9fyj9drLBeVlGptObkrNS0hqXwg=; b=UtEikXG5ek0YYc9/cxEWV9lbhNexgc2m7kF/eNGCRXmwuG6RtjTG657xU5WTKJu/jl x03BdQ0yFTdbn+xcbOnK8yeg//qVgjllzTh7ow2jqZbz2L6zuEMsank4bdAvzjiznfV9 WkgywtqGTlNSQAV1uV3sVOuqyQu073THdIDkM= X-Forwarded-Encrypted: i=1; AKwUvBz86q7uY6SxncGI4aBQ4v6xVfHMgWjjFcvd/BIBMu6mRZ+r2krcK0loGYphWdGpgWthGVjZearkxVHryrw=@vger.kernel.org X-Received: by 2002:a17:90b:4fd0:b0:3a0:2900:f584 with SMTP id 98e67ed59e1d1-3a07322128bmr45364a91.46.1790055053169; Mon, 21 Sep 2026 22:30:53 -0700 (PDT) X-Received: by 2002:a17:90b:4fd0:b0:3a0:2900:f584 with SMTP id 98e67ed59e1d1-3a07322128bmr45337a91.46.1790055052677; Mon, 21 Sep 2026 22:30:52 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-144f29dc903sm2029025c88.3.2026.09.21.22.30.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 22:30:52 -0700 (PDT) From: Bhargava Marreddy To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, vsrama-krishna.nemani@broadcom.com, vikas.gupta@broadcom.com, Bhargava Marreddy , Rajashekar Hudumula , Dharmender Garg , Kiran Kella Subject: [PATCH net-next v2 3/6] bnge: Move bnapi and ring_grp allocation to probe/remove Date: Tue, 22 Sep 2026 10:59:01 +0530 Message-ID: <20260922052904.59237-4-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260922052904.59237-1-bhargava.marreddy@broadcom.com> References: <20260922052904.59237-1-bhargava.marreddy@broadcom.com> 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 X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e Content-Type: text/plain; charset="utf-8" Allocate bn->bnapi and bn->grp_info during probe and free them during remove instead of reallocating on every open/close. To support this shift: - Pass an irq_re_init flag to bnge_init_ring_grps() so open can reset per-group state without reallocating bn->grp_info. - Have bnge_free_core() clear rx_ring/tx_ring back-pointers via the new bnge_clear_bnapi_queues() rather than freeing bn->bnapi. - Replace "!bn->bnapi" checks in bnge_get_queue_stats_rx() and bnge_get_ethtool_stats() with !netif_running(dev) checks to avoid reading sw_stats memory freed on close. Signed-off-by: Bhargava Marreddy Reviewed-by: Rajashekar Hudumula Reviewed-by: Dharmender Garg Reviewed-by: Kiran Kella --- .../net/ethernet/broadcom/bnge/bnge_ethtool.c | 2 +- .../net/ethernet/broadcom/bnge/bnge_netdev.c | 107 ++++++++++++------ 2 files changed, 71 insertions(+), 38 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_ethtool.c b/drivers/ne= t/ethernet/broadcom/bnge/bnge_ethtool.c index 2467e44de291..ad9956bc4408 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_ethtool.c @@ -346,7 +346,7 @@ static void bnge_get_ethtool_stats(struct net_device *d= ev, u32 tpa_stats; u32 i, j =3D 0; =20 - if (!bn->bnapi) { + if (!netif_running(dev)) { j +=3D bnge_get_num_ring_stats(bd); goto skip_ring_stats; } diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net= /ethernet/broadcom/bnge/bnge_netdev.c index dfd68b830ded..367109dad496 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c @@ -1185,14 +1185,18 @@ static void bnge_free_ring_grps(struct bnge_net *bn) bn->grp_info =3D NULL; } =20 -static int bnge_init_ring_grps(struct bnge_net *bn) +static int bnge_init_ring_grps(struct bnge_net *bn, bool irq_re_init) { struct bnge_dev *bd =3D bn->bd; int i; =20 - bn->grp_info =3D kzalloc_objs(struct bnge_ring_grp_info, bd->nq_nr_rings); - if (!bn->grp_info) - return -ENOMEM; + if (irq_re_init) { + bn->grp_info =3D kzalloc_objs(struct bnge_ring_grp_info, + bd->nq_nr_rings); + if (!bn->grp_info) + return -ENOMEM; + } + for (i =3D 0; i < bd->nq_nr_rings; i++) { bn->grp_info[i].fw_stats_ctx =3D INVALID_HW_RING_ID; bn->grp_info[i].fw_grp_id =3D INVALID_HW_RING_ID; @@ -1210,25 +1214,6 @@ static void bnge_free_bnapi_mem(struct bnge_net *bn) bn->bnapi =3D NULL; } =20 -static void bnge_free_core(struct bnge_net *bn) -{ - bnge_free_vnic_attributes(bn); - bnge_free_tx_rings(bn); - bnge_free_rx_rings(bn); - bnge_free_nq_tree(bn); - bnge_free_nq_arrays(bn); - bnge_free_ring_stats(bn); - bnge_free_ring_grps(bn); - bnge_free_vnics(bn); - kfree(bn->tx_ring_map); - bn->tx_ring_map =3D NULL; - kfree(bn->tx_ring); - bn->tx_ring =3D NULL; - kfree(bn->rx_ring); - bn->rx_ring =3D NULL; - bnge_free_bnapi_mem(bn); -} - static int bnge_alloc_bnapi_mem(struct bnge_net *bn) { struct bnge_dev *bd =3D bn->bd; @@ -1257,16 +1242,52 @@ static int bnge_alloc_bnapi_mem(struct bnge_net *bn) return 0; } =20 -static int bnge_alloc_core(struct bnge_net *bn) +static void bnge_clear_bnapi_queues(struct bnge_net *bn) { struct bnge_dev *bd =3D bn->bd; - int i, j, rc; + int i; =20 - rc =3D bnge_alloc_bnapi_mem(bn); - if (rc) - return rc; + if (!bn->bnapi) + return; + + for (i =3D 0; i < bd->nq_nr_rings; i++) { + struct bnge_napi *bnapi =3D bn->bnapi[i]; + int j; + + if (!bnapi) + continue; + + bnapi->rx_ring =3D NULL; + for (j =3D 0; j < BNGE_MAX_TXR_PER_NAPI; j++) + bnapi->tx_ring[j] =3D NULL; + } +} + +static void bnge_free_core(struct bnge_net *bn) +{ + bnge_free_vnic_attributes(bn); + bnge_free_tx_rings(bn); + bnge_free_rx_rings(bn); + bnge_free_nq_tree(bn); + bnge_free_nq_arrays(bn); + bnge_free_ring_stats(bn); + bnge_free_vnics(bn); + + kfree(bn->tx_ring_map); + bn->tx_ring_map =3D NULL; + kfree(bn->tx_ring); + bn->tx_ring =3D NULL; + kfree(bn->rx_ring); + bn->rx_ring =3D NULL; + + bnge_clear_bnapi_queues(bn); +} + +static int bnge_alloc_core(struct bnge_net *bn) +{ + struct bnge_dev *bd =3D bn->bd; + int i, j, rc =3D -ENOMEM; =20 - rc =3D -ENOMEM; bn->rx_ring =3D kzalloc_objs(struct bnge_rx_ring_info, bd->rx_nr_rings); if (!bn->rx_ring) goto err_free_core; @@ -1402,6 +1423,7 @@ static void bnge_init_nq_tree(struct bnge_net *bn) struct bnge_nq_ring_info *nqr =3D &bn->bnapi[i]->nq_ring; struct bnge_ring_struct *ring =3D &nqr->ring_struct; =20 + nqr->nq_raw_cons =3D 0; ring->fw_ring_id =3D INVALID_HW_RING_ID_32BIT; for (j =3D 0; j < nqr->cp_ring_count; j++) { struct bnge_cp_ring_info *cpr =3D &nqr->cp_ring_arr[j]; @@ -2847,19 +2869,15 @@ static int bnge_init_nic(struct bnge_net *bn) =20 bnge_init_tx_rings(bn); =20 - rc =3D bnge_init_ring_grps(bn); - if (rc) - goto err_free_rx_ring_pair_bufs; + bnge_init_ring_grps(bn, false); =20 bnge_init_vnics(bn); =20 rc =3D bnge_init_chip(bn); if (rc) - goto err_free_ring_grps; + goto err_free_rx_ring_pair_bufs; return rc; =20 -err_free_ring_grps: - bnge_free_ring_grps(bn); err_free_rx_ring_pair_bufs: bnge_free_rx_ring_pair_bufs(bn); return rc; @@ -3235,7 +3253,7 @@ static void bnge_get_queue_stats_rx(struct net_device= *dev, int i, struct bnge_nq_ring_info *nqr; u64 *sw; =20 - if (!bn->bnapi) + if (!netif_running(dev)) return; =20 nqr =3D &bn->bnapi[i]->nq_ring; @@ -3557,14 +3575,27 @@ int bnge_netdev_alloc(struct bnge_dev *bd, int max_= irqs) spin_lock_init(&bn->stats_lock); =20 netdev->request_ops_lock =3D true; + + rc =3D bnge_alloc_bnapi_mem(bn); + if (rc) + goto err_free_port_stats; + + rc =3D bnge_init_ring_grps(bn, true); + if (rc) + goto err_free_bnapi_mem; + rc =3D register_netdev(netdev); if (rc) { dev_err(bd->dev, "Register netdev failed rc: %d\n", rc); - goto err_free_port_stats; + goto err_free_ring_grps; } =20 return 0; =20 +err_free_ring_grps: + bnge_free_ring_grps(bn); +err_free_bnapi_mem: + bnge_free_bnapi_mem(bn); err_free_port_stats: bnge_free_port_stats(bn); err_free_workq: @@ -3589,6 +3620,8 @@ void bnge_netdev_free(struct bnge_dev *bd) destroy_workqueue(bn->bnge_pf_wq); =20 bnge_free_port_stats(bn); + bnge_free_ring_grps(bn); + bnge_free_bnapi_mem(bn); =20 free_netdev(netdev); bd->netdev =3D NULL; --=20 2.47.3 From nobody Fri Sep 25 18:52:25 2026 Received: from mail-pl1-f226.google.com (mail-pl1-f226.google.com [209.85.214.226]) (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 58DD13F6C3E for ; Tue, 22 Sep 2026 05:31:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790055067; cv=none; b=EhslweDIgyd/hD8uEUzEpWXS3s8GG4h+A+c+nXeUoM+BXL1FkxnECu/xsWwr275XnkJ5XHEcSgEp1zEPxDa7GSTR6TU1QLr65Xe5LyCM2vx97KE3cLNVxLMX4aH88k3PHIX8Q0Jue6UC+AVau7RQ8mFTrikouX3HmTOF6hpFGkg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790055067; c=relaxed/simple; bh=HMr+FTKSXdaAvtfbSzFFav/sQ1dYA/aUy2gruEkZvXg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nz+LlvwGmRf4WRvPlfzrw8KF2qgZgd10yua6L1Iiunrv5j0DY/3CgXjhb7erx0OzFLbs7fAg2pAyhtQh/j9DK0GRXWsaJ5+2zMYN2JOxDoB6bSxq3M1gYfPb+RNuENlg3sQ6Ul7CPg+UVk/4/+RJzNqxFd4b/Exy9UowM+HdDJg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=bOpFBKQd; arc=none smtp.client-ip=209.85.214.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="bOpFBKQd" Received: by mail-pl1-f226.google.com with SMTP id d9443c01a7336-2d58efc7356so25082075ad.1 for ; Mon, 21 Sep 2026 22:31:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790055061; x=1790659861; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=6bjthBBm7uT2MkmTwxK/+W0UJNyCdyeJcyjZyefo08M=; b=vX1pWAIVlmFHOxmqGPnG3lYwhxdkgeJeMMoLozzWFe/zIylRcpDKFeuNdnqZdGGJ5h 2rbpKOBcs5qW6Nycs9FY76dV+OFgA9h1ohqRoNmGuMEkKmHeUVEIhKnyX0BSDntdjMaY XqnOpuFIBJydRBz/zVLqm3QtCRmO4FRdRWJerGXlHcmmXsoMBp3out1n0TTqjp8QBrja MocYNyB8a5AKADENOu6Uik/VdJRTJaN9Uqplfdx2cIWG1Qc1Qa3W5TFuSaGd+Ugoydzo UMcLaAOVnwWoH9T6+WAfNNcLTGOmXkBa+ZV5I8pH+n5gZd0SfFSDpuhO/n+NzmfBkqha LHuw== X-Forwarded-Encrypted: i=1; AKwUvBwoBAStFZw7J/ZRVnoiiEfGpZKUigGeK7uIGJ2BcZnx3+HkdE/pkZyz9x66QMafjFizf7xp41ONwtGy1W0=@vger.kernel.org X-Gm-Message-State: AFuF++kQgcxT7Z29jvjZHGCBVYt7dLBzQtXqD6exZHthbHUSRZwGmHoG OJ361U8OtinXvP7Pi/s/b3FEQSZiZmNE9Q5Iq1/8l3WQjQEYLWYoqzoWJOPqZR+dQWhedD4TH1U p/lYOSGRHYZFcbh8d0dcHKMEvVUkhOaICEHaDMOtNf3HEWNzm4m8oVHWtmBI+VeSED8E2RImLjz t9inN12fjnMEF0KTo5wYhJRDPWMbRHGs+ungS5/LRYPn+ilRYjwvtgFjQVih2mYdYF+z4RDphci LSWYA729jfM64x4hoXOKe55Fg== X-Gm-Gg: AYBFou2QSDIsKod35+U/WJn8aEIFLGiQtxGecGVKXe+Ui9SpID2c5Wao8G8lOyGWLkg od29JYS99YvqqRQr8Hz+hBOD80GRgkzHdt3kGCaM14KV/BVIHiQdlR2HB9vifMwhh+wACwyY6d+ tNa/S7TpYIgu4Gvf5OaHTB3dDnOcNwtCCr9mcvNN4ufmivG5t5q/OTimiMDvHaqNXE1i5zmn+nK GuWRZkIcxQvNl3aR1dNQXvSYDufsmlB3kAt8eELB/xon0oiHEmTUEqx/Ihd2fLhgmJcdGNwO4RI UdmN1CaVg9KHckuARnKrEz++qTJZykijG3NnqKPk1eMMJmzxXnY1Y1+m22hEdT6qimo+kTrgrWP aFvXc4NIxgJfcpu9sxq4WGcsiKCNf0rFul/PbT79vM3qHOWbmEDT+wmypv/dGTUq+TgyVeDAOFe cz6kdUvaro1wbxQlB2TIX8/EVUMvoAKccQU/eL9WGYLqCk X-Received: by 2002:a17:90b:180a:b0:39e:6c69:34d6 with SMTP id 98e67ed59e1d1-3a073308e97mr27601a91.58.1790055061138; Mon, 21 Sep 2026 22:31:01 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-125.dlp.protect.broadcom.com. [144.49.247.125]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-3a06e246bbasm469616a91.1.2026.09.21.22.31.00 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Sep 2026 22:31:01 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-cc7361c62b9so3097149a12.3 for ; Mon, 21 Sep 2026 22:31:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1790055059; x=1790659859; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=6bjthBBm7uT2MkmTwxK/+W0UJNyCdyeJcyjZyefo08M=; b=bOpFBKQdchqGQicyko/Cf1vPzTkhguGRYD6IRIwAKuDTJKl5McTbo3QzcIuVgr9AJ6 oetlthpJMOAuRoRvaK5XHntxFmyAvz6z5GaCHywccBeKgCnTaueXioWi4uDQmgoBZ23C 7g1xeuvlWR+1hO1bNQb8YZm3YNLR5YsIu4wTg= X-Forwarded-Encrypted: i=1; AKwUvBwXRTcfoquLE4Okab8pemH7VPtfRl6LY1Lk0hS7m4mvklHe2x3QUGdpcU98cMUArBrAPSTGGurxJGmO/u4=@vger.kernel.org X-Received: by 2002:a17:90b:3950:b0:39e:6a81:5a8f with SMTP id 98e67ed59e1d1-3a07328562fmr29265a91.35.1790055059049; Mon, 21 Sep 2026 22:30:59 -0700 (PDT) X-Received: by 2002:a17:90b:3950:b0:39e:6a81:5a8f with SMTP id 98e67ed59e1d1-3a07328562fmr29239a91.35.1790055058553; Mon, 21 Sep 2026 22:30:58 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-144f29dc903sm2029025c88.3.2026.09.21.22.30.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 22:30:58 -0700 (PDT) From: Bhargava Marreddy To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, vsrama-krishna.nemani@broadcom.com, vikas.gupta@broadcom.com, Bhargava Marreddy , Rajashekar Hudumula , Dharmender Garg Subject: [PATCH net-next v2 4/6] bnge: Drop obsolete bn->bnapi NULL checks in open/close paths Date: Tue, 22 Sep 2026 10:59:02 +0530 Message-ID: <20260922052904.59237-5-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260922052904.59237-1-bhargava.marreddy@broadcom.com> References: <20260922052904.59237-1-bhargava.marreddy@broadcom.com> 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 X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e Content-Type: text/plain; charset="utf-8" Since bn->bnapi is now allocated during probe in bnge_netdev_alloc() and freed in bnge_netdev_free(), it remains non-NULL for the lifetime of the open/close path helpers. Remove the dead "if (!bn->bnapi)" guards in bnge_free_ring_stats(), bnge_clear_bnapi_queues(), bnge_disable_int(), and bnge_hwrm_ring_free(). Signed-off-by: Bhargava Marreddy Reviewed-by: Rajashekar Hudumula Reviewed-by: Dharmender Garg --- drivers/net/ethernet/broadcom/bnge/bnge_netdev.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net= /ethernet/broadcom/bnge/bnge_netdev.c index 367109dad496..9e606fd1a580 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c @@ -85,9 +85,6 @@ static void bnge_free_ring_stats(struct bnge_net *bn) struct bnge_dev *bd =3D bn->bd; int i; =20 - if (!bn->bnapi) - return; - for (i =3D 0; i < bd->nq_nr_rings; i++) { struct bnge_napi *bnapi =3D bn->bnapi[i]; struct bnge_nq_ring_info *nqr =3D &bnapi->nq_ring; @@ -1247,9 +1244,6 @@ static void bnge_clear_bnapi_queues(struct bnge_net *= bn) struct bnge_dev *bd =3D bn->bd; int i; =20 - if (!bn->bnapi) - return; - for (i =3D 0; i < bd->nq_nr_rings; i++) { struct bnge_napi *bnapi =3D bn->bnapi[i]; int j; @@ -2382,9 +2376,6 @@ static void bnge_disable_int(struct bnge_net *bn) struct bnge_dev *bd =3D bn->bd; int i; =20 - if (!bn->bnapi) - return; - for (i =3D 0; i < bd->nq_nr_rings; i++) { struct bnge_napi *bnapi =3D bn->bnapi[i]; struct bnge_nq_ring_info *nqr; @@ -2576,9 +2567,6 @@ static void bnge_hwrm_ring_free(struct bnge_net *bn, = bool close_path) struct bnge_dev *bd =3D bn->bd; int i; =20 - if (!bn->bnapi) - return; - for (i =3D 0; i < bd->tx_nr_rings; i++) bnge_hwrm_tx_ring_free(bn, &bn->tx_ring[i], close_path); =20 --=20 2.47.3 From nobody Fri Sep 25 18:52:25 2026 Received: from mail-pg1-f226.google.com (mail-pg1-f226.google.com [209.85.215.226]) (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 EEBD5484882 for ; Tue, 22 Sep 2026 05:31:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790055070; cv=none; b=heJwzpLwAq8MGwqbdLEZ0vu1/w176Zh4/Ui0fC+w+TqqWINnZo98qxFLz2zKcnZxXmH0I1JizXN5AchqiZZ3h29QyiKueps2IQse/oq6eyLjxYn7ffgz6LYftlaiH5IEU/H26IT9Cw1HQhHn+I8HFW5g+yEs0LDtaj99eNTynCA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790055070; c=relaxed/simple; bh=iE2EQIj89CjFufdSkRfrh/KJHBUHWO1xT4ECC4lhkH8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AWcqXVppMrz4Tv2kwvyYfNjHc/SDAnJup2zGUc6R1YwN5CrdQoDO5pJ/nrzK0tcD0r25j/cq0blCXf6azK6kwOvlJc5Fn8AHBXc0omSVeBqUd0uY3eGlNViRyxeqit6DdcwMiFh6IFYOinYIj2g47liA0M0V0ngf9UGaoLH0xfE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=FJ87rkqI; arc=none smtp.client-ip=209.85.215.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="FJ87rkqI" Received: by mail-pg1-f226.google.com with SMTP id 41be03b00d2f7-cbedd5aece4so441916a12.0 for ; Mon, 21 Sep 2026 22:31:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790055067; x=1790659867; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=yttZlC+kNKcKuY5rxX74d0x76Vc7HjUslVhaenkBtlA=; b=WTu1K9NEOP6OdS2W6UNXAOw+sB7T4Q8R9Fl1vwqLnLc71eWf+Gp8w8gwD6kDQzTnaK yurwXzMH6rtdsTLS0GthHZ7SCsyYIGWzDDsuDPrk0GaPby/JDWG2tvb1O9bnjVudqfxk FUNh3L1BCsJn7MsHuD+XCp+PUjKFnTM5e4oHpFVixOEYYXmaDyxHK3TFLEHragrlUMar Wv7b3NvCk2hq4Nnpo0ArgbIKWLeHtmBgpYNJDue0TWnz72x3j9zqLWzey4g4re21kKkq rA5FgqlFGdBYA/mq37DPz8nrD+h9L5qwteBG1PGp3XYEKzNK2DHKbRoRWcTVtLhLFdZn YjXQ== X-Forwarded-Encrypted: i=1; AKwUvBywgcSg9k7wKlKXqeSmPuseiDb79MBD5Iu35Xz/dWpKSuDViMAzimn73LYhWCQ/TnB7QUT+ARfE77UO3pw=@vger.kernel.org X-Gm-Message-State: AFuF++mEcrVcbQRsLZ8Lcaim/gkKIgZmx4vmV37XK81gnBpOr6Oxm2qw wK/1bhIxarayw7AiclFx0/hF0ZtiXwli49OWG0X/WLljD34Mo+CSlDUUxcbb5CP8aWwxU8qSN3Q dB4gI09JJ3S0QBKrMHxgSNkujcEWBiZszmtUxOPBRsOr2Z6RwFq23sFEgADMF8+AfGnezqUH6Yh UYks6F3b9dCRzHrX6z3rhoU7s/v28nhEYFkjYUJN9IT7E4JGFae/ey2aVwuzUFHvdEJhkrfbutO Rh/NPvnZ4QiprKhyVv7G3rCPw== X-Gm-Gg: AYBFou3ZvC2Q4y4dvvc6UvISmFwv5Hh+bvzSRVHeO5nFKzVGNDbdl8AGSq+FIrbInPL 5+oAoxRI8J3MQMJy7TmYGL1rZgn5pEuuK8u6papuOJgv7ZD8Ea7A4rRMQlnO5HIFpr9kzWiozRY 4pUxbnuwhN/PqclN2s9dAsf8ezf+dwc2x0uD1tvZz8yg4R7eVAaetDPKHmLk5sGMzsLARxeCzMW iW6/Ff8/JUGfvO3pVhNuiK8WJ3z2fkzs1F3zODRvbrjTjazaqlR0gz8XvJweBt7CF8LBmrT8HIz 6y1+n6WMYiDtYxLTDXADt/QcK5zULTYqR8zNvlMlhLVtZeb+oedTsHz7ovfAE4f3Ftoal+Sb8MS dbj8UInOYiqo5b3eUCcRjAV9+h2rUss2Fhf+gDN40KdycpR4VhVjYsMsuSPKnSN/UPh6I/MSAZO BqgTSIjcYU4e8KieL8Z8w8Sw3F7i2iel9vkxb5fpY6AdQ/ X-Received: by 2002:a17:90b:134d:b0:3a0:5238:1aec with SMTP id 98e67ed59e1d1-3a07309889amr44820a91.2.1790055066620; Mon, 21 Sep 2026 22:31:06 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-125.dlp.protect.broadcom.com. [144.49.247.125]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-3a066ab80b2sm1005629a91.2.2026.09.21.22.31.06 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Sep 2026 22:31:06 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-398dc3d8f0fso579709a91.0 for ; Mon, 21 Sep 2026 22:31:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1790055065; x=1790659865; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=yttZlC+kNKcKuY5rxX74d0x76Vc7HjUslVhaenkBtlA=; b=FJ87rkqIUHRyGSqZLJhFqbNhQJ3etLGxIdT0vbADOFH3EkhJRrrZ0em2BKHFAhk8+7 P9bGsLohKt0ug4y4fs+PP79Cvh7kQcmlvWLloBsGGw1RsSggLU5glhPUEckYOQE72Z2b mmGGW0zwLtUQwdJThPeIjxkXUF2FUUwL/xmr8= X-Forwarded-Encrypted: i=1; AKwUvBxTJ3mLdZPZ8h6IZkMcVm9I7gPPpICHHksJDAI3IyVVTrUMEQVK07iAYC0je31vcQhW4RfUuWW6GxWQVZ0=@vger.kernel.org X-Received: by 2002:a17:90b:48ce:b0:39e:4c97:ce09 with SMTP id 98e67ed59e1d1-3a07320accfmr39317a91.42.1790055064666; Mon, 21 Sep 2026 22:31:04 -0700 (PDT) X-Received: by 2002:a17:90b:48ce:b0:39e:4c97:ce09 with SMTP id 98e67ed59e1d1-3a07320accfmr39288a91.42.1790055064112; Mon, 21 Sep 2026 22:31:04 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-144f29dc903sm2029025c88.3.2026.09.21.22.30.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 22:31:03 -0700 (PDT) From: Bhargava Marreddy To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, vsrama-krishna.nemani@broadcom.com, vikas.gupta@broadcom.com, Bhargava Marreddy , Rajashekar Hudumula Subject: [PATCH net-next v2 5/6] bnge: Quiesce NQ0 around ring teardown in bnge_free_core() Date: Tue, 22 Sep 2026 10:59:03 +0530 Message-ID: <20260922052904.59237-6-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260922052904.59237-1-bhargava.marreddy@broadcom.com> References: <20260922052904.59237-1-bhargava.marreddy@broadcom.com> 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 X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e Content-Type: text/plain; charset="utf-8" Add bnge_quiesce_nq0() and bnge_resume_nq0() helpers to temporarily disable and re-enable NQ0 NAPI. Use these helpers to bracket ring teardown in bnge_free_core() and ring rebuild in bnge_alloc_core(). Both helpers currently no-op, since no bnge_napi has BNGE_NAPI_NQ0 set yet. The next patch creates NQ0 during probe and sets this flag, at which point these helpers become load-bearing: because NQ0 will remain active while administratively down, its NAPI is not disabled by the standard close paths, so temporarily quiescing it during core resource free/rebuild windows is required to prevent stray completions from accessing uninitialized or freed memory. Signed-off-by: Bhargava Marreddy Reviewed-by: Vikas Gupta Reviewed-by: Rajashekar Hudumula --- .../net/ethernet/broadcom/bnge/bnge_netdev.c | 76 ++++++++++++++----- .../net/ethernet/broadcom/bnge/bnge_netdev.h | 11 +++ 2 files changed, 68 insertions(+), 19 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net= /ethernet/broadcom/bnge/bnge_netdev.c index 9e606fd1a580..1c12282d7e88 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c @@ -442,6 +442,25 @@ static void bnge_sp_task(struct work_struct *work) netdev_unlock(bn->netdev); } =20 +static void bnge_db_nq_arm(struct bnge_net *bn, + struct bnge_db_info *db, u32 idx) +{ + bnge_writeq(bn->bd, db->db_key64 | DBR_TYPE_NQ_ARM | + DB_RING_IDX(db, idx), db->doorbell); +} + +static void bnge_db_nq(struct bnge_net *bn, struct bnge_db_info *db, u32 i= dx) +{ + bnge_writeq(bn->bd, db->db_key64 | DBR_TYPE_NQ_MASK | + DB_RING_IDX(db, idx), db->doorbell); +} + +static void bnge_db_cq(struct bnge_net *bn, struct bnge_db_info *db, u32 i= dx) +{ + bnge_writeq(bn->bd, db->db_key64 | DBR_TYPE_CQ_ARMALL | + DB_RING_IDX(db, idx), db->doorbell); +} + static void bnge_free_nq_desc_arr(struct bnge_nq_ring_info *nqr) { struct bnge_ring_struct *ring =3D &nqr->ring_struct; @@ -563,6 +582,40 @@ static void bnge_free_nq_tree(struct bnge_net *bn) } } =20 +static void bnge_quiesce_nq0(struct bnge_net *bn) +{ + struct bnge_napi *bnapi =3D bn->bnapi[BNGE_NQ0_NAPI_IDX]; + struct bnge_nq_ring_info *nqr =3D &bnapi->nq_ring; + struct bnge_ring_struct *ring; + struct bnge_dev *bd =3D bn->bd; + + if (!BNGE_NQ0_NAPI(bnapi)) + return; + + if (test_and_set_bit(BNGE_NAPI_QUIESCED, &bnapi->flags)) + return; + + ring =3D &nqr->ring_struct; + napi_disable_locked(&bnapi->napi); + synchronize_irq(bd->irq_tbl[ring->map_idx].vector); + bnge_db_nq(bn, &nqr->nq_db, nqr->nq_raw_cons); +} + +static void bnge_resume_nq0(struct bnge_net *bn) +{ + struct bnge_napi *bnapi =3D bn->bnapi[BNGE_NQ0_NAPI_IDX]; + struct bnge_nq_ring_info *nqr =3D &bnapi->nq_ring; + + if (!BNGE_NQ0_NAPI(bnapi)) + return; + + if (!test_and_clear_bit(BNGE_NAPI_QUIESCED, &bnapi->flags)) + return; + + napi_enable_locked(&bnapi->napi); + bnge_db_nq_arm(bn, &nqr->nq_db, nqr->nq_raw_cons); +} + static int alloc_one_cp_ring(struct bnge_net *bn, struct bnge_cp_ring_info *cpr) { @@ -1260,6 +1313,7 @@ static void bnge_clear_bnapi_queues(struct bnge_net *= bn) static void bnge_free_core(struct bnge_net *bn) { bnge_free_vnic_attributes(bn); + bnge_quiesce_nq0(bn); bnge_free_tx_rings(bn); bnge_free_rx_rings(bn); bnge_free_nq_tree(bn); @@ -1275,6 +1329,7 @@ static void bnge_free_core(struct bnge_net *bn) bn->rx_ring =3D NULL; =20 bnge_clear_bnapi_queues(bn); + bnge_resume_nq0(bn); } =20 static int bnge_alloc_core(struct bnge_net *bn) @@ -1352,10 +1407,12 @@ static int bnge_alloc_core(struct bnge_net *bn) if (rc) goto err_free_core; =20 + bnge_quiesce_nq0(bn); rc =3D bnge_alloc_nq_tree(bn); if (rc) goto err_free_core; =20 + bnge_resume_nq0(bn); bn->vnic_info[BNGE_VNIC_DEFAULT].flags |=3D BNGE_VNIC_RSS_FLAG | BNGE_VNIC_MCAST_FLAG | BNGE_VNIC_UCAST_FLAG; @@ -1379,25 +1436,6 @@ u32 bnge_cp_ring_for_tx(struct bnge_tx_ring_info *tx= r) return txr->tx_cpr->ring_struct.fw_ring_id; } =20 -static void bnge_db_nq_arm(struct bnge_net *bn, - struct bnge_db_info *db, u32 idx) -{ - bnge_writeq(bn->bd, db->db_key64 | DBR_TYPE_NQ_ARM | - DB_RING_IDX(db, idx), db->doorbell); -} - -static void bnge_db_nq(struct bnge_net *bn, struct bnge_db_info *db, u32 i= dx) -{ - bnge_writeq(bn->bd, db->db_key64 | DBR_TYPE_NQ_MASK | - DB_RING_IDX(db, idx), db->doorbell); -} - -static void bnge_db_cq(struct bnge_net *bn, struct bnge_db_info *db, u32 i= dx) -{ - bnge_writeq(bn->bd, db->db_key64 | DBR_TYPE_CQ_ARMALL | - DB_RING_IDX(db, idx), db->doorbell); -} - static int bnge_cp_num_to_irq_num(struct bnge_net *bn, int n) { struct bnge_napi *bnapi =3D bn->bnapi[n]; diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h b/drivers/net= /ethernet/broadcom/bnge/bnge_netdev.h index 476b5bab96fe..d6e65fc7d038 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h @@ -539,6 +539,15 @@ struct bnge_tx_ring_info { struct bnge_ring_struct tx_ring_struct; }; =20 +#define BNGE_NQ0_NAPI_IDX 0 + +enum bnge_napi_flag { + BNGE_NAPI_NQ0, + BNGE_NAPI_QUIESCED, +}; + +#define BNGE_NQ0_NAPI(bnapi) (test_bit(BNGE_NAPI_NQ0, &(bnapi)->flags)) + struct bnge_napi { struct napi_struct napi; struct bnge_net *bn; @@ -555,6 +564,8 @@ struct bnge_napi { #define BNGE_TX_CMP_EVENT 0x10 bool in_reset; bool tx_fault; + + unsigned long flags; }; =20 #define INVALID_STATS_CTX_ID -1 --=20 2.47.3 From nobody Fri Sep 25 18:52:25 2026 Received: from mail-pj1-f97.google.com (mail-pj1-f97.google.com [209.85.216.97]) (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 AEAC3486656 for ; Tue, 22 Sep 2026 05:31:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.97 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790055077; cv=none; b=Hg5xkukJCRBqXOMArvARwQ9chMYPiCVtTIknap2W6MvfDHF55E1CWgZja7qOlxyA3hffPAQbftRiMt0wAInn0XK9dsSzdIvNTBC710/YNfU1n15/X0tryTXFbg9Ff+EcjR1XDHYwpn5dO3ZU+5AOb2QKdMED0lXmVIR06Pn5Ni4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790055077; c=relaxed/simple; bh=DthHjt8Elvy2J18eyHf7QbP7ZPdK2aXm9aR+ZcvlR/E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KH7H0ZFVwZ/meHc9UD/i7grBzlgqYFR6MfioARqnvkM8/zWlTdDpZaUrIj+PKaXB1C7QDqw0g4F913mAFPcCg7uhrmoZevGQt2an+jZ8EKHqimEVis0MO1rWVwTO5iMExond8RG3IVN0bY9Au/mAhobDMqtci1yXMG9qKEWIx9Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=E3TzpNTv; arc=none smtp.client-ip=209.85.216.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="E3TzpNTv" Received: by mail-pj1-f97.google.com with SMTP id 98e67ed59e1d1-398b1e63c49so505924a91.0 for ; Mon, 21 Sep 2026 22:31:14 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790055074; x=1790659874; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=WhqzrfgSCVnm44xvZ8EipJaXe2pVIyUoOZLXecc8Sj4=; b=oqH7gZF/ZCN0JKFfHCuSLQc4JOWluTOeqGop8AXMfRuJ4RWtXmTnwkp7GgB5G9dyIh 0I6eY8nvCmI+ZA76oALF2Mgs4pq3BOVXL/pWFYqO/nJYsoXPIgZI0FELGt14LvC9f1ol 6xEeiIi2hrZHiTwIUkmJ1A1r8Y7x6UVFFx50mV0Oz8XMTRTVyrIB54oqpL2F8KK/bOwT gcYYUCT6YmRF4c6LWHMfCaqKs21lQIgThBXqdd7ax9HbGvrPEJXSAV+SiLLiRFxxGGqB br5SwIsShyzv3z1NNdtFCdRjV5H8+hhzUaMeFdVjLKwlbmD15/7/2kya0X9IFeA9FEYW EVvw== X-Forwarded-Encrypted: i=1; AKwUvBxn0+6QP5xLW4lcevZ/OMyHwUq5v4frNagUvbBPTy/jfOotAjXH6giOb1szYVu0iK4qVuaY/T1chcGHML0=@vger.kernel.org X-Gm-Message-State: AFuF++kmwIsR24llmGGwIoSPJHfdvCVveMJAWXM6SsdpILpVjlNSqLXG ytl1hpynnQNXIg1Xppk6uCw+QZUGRBJt1CRD0hEN9f7DG0HhB8V9BAiWkMXxPhJROa+oQRHa38j /OW7G5Iqi2Hiohip5FZqj0OdGfDkhGhRhaNsLMBWEj9HuZpuqXu0c+sdz/5oyUK8IUkvSZKZvAH ltFF5dSwX7+zosRpvfDOUqVElVD1XP4WG1r0tBpCWlyKDtFhF88AVaqpNN+fydMyEr/rIwUNLOd sUXDtOaXjaLoqYLf6fR+g7+8g== X-Gm-Gg: AYBFou2RezJyM+4HYC0VubQr9+ev8NLINsRN0qYCHPsEtvRbZWN4vzWBvNJ3tDYqPdw bjBpGctyOfQ85Z2qzFxIzgePQFHEdnJyUlTKr0J0JNdYLMy+nbnoEjrw8A1NfB72OcTfozSTlv/ 9+rQ7HIlHqBCkmau8FjlYKARcXyceph2wcZzj5ROaGspSKjPNXQMtFKaSNz13I7GOS/DZXQD51i PzTs9TBDYEEQ4QZMQNIiX8BqWXxfhFMtHjajV5ULUAo+NSIzrYm2fEKv3kZlVvqpZqF2imz2K/C 9yWM0XWwoRR4NlkwJa3RustjJTQWLRuUOhTsWJzE4FU5QvM9hFkd8XKo5eW9oxT72dW1sH/+Ir+ G+KthViDSR2xgFyegUsTCH59xl+4AThbSW0HR1Dk34V4IKL+8+pTaYJ0P3RT0gLNUMI4/adUwnp NqZjMWT6FsMfVKleVvlM1jg/n+M/UwpUEOWQUq3u3NzANe X-Received: by 2002:a17:90b:554b:b0:39e:6c68:fd89 with SMTP id 98e67ed59e1d1-3a073238599mr33403a91.30.1790055073813; Mon, 21 Sep 2026 22:31:13 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-125.dlp.protect.broadcom.com. [144.49.247.125]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-3a066cbc74asm999174a91.6.2026.09.21.22.31.13 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Sep 2026 22:31:13 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-39e18af9f48so754051a91.1 for ; Mon, 21 Sep 2026 22:31:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1790055072; x=1790659872; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=WhqzrfgSCVnm44xvZ8EipJaXe2pVIyUoOZLXecc8Sj4=; b=E3TzpNTv8HSb+UhBi2I8qE8Hq25t/CSFyW6mP4+L4THypfm+W2BeQiC+syNTUZM5vN WaALgrho+qzsnNmJCQrAWykgQkRe7IedneIAfqKJYQSdEtTCkU/Eft3d7ISP8irWkSqm HC3iJOZXhpH9OlL2js0nL8oJW3YwIUTtVALLQ= X-Forwarded-Encrypted: i=1; AKwUvBxfxEl1gQ2oPRIBprqX+zRvjTEdMbPj5QLXMIYogs8Vn7/xOcs8YMQNMZrXkQiyp8g4hOhCnamRcjiN48I=@vger.kernel.org X-Received: by 2002:a17:90b:3d89:b0:3a0:25f0:d897 with SMTP id 98e67ed59e1d1-3a073236bb6mr35728a91.46.1790055071750; Mon, 21 Sep 2026 22:31:11 -0700 (PDT) X-Received: by 2002:a17:90b:3d89:b0:3a0:25f0:d897 with SMTP id 98e67ed59e1d1-3a073236bb6mr35706a91.46.1790055071238; Mon, 21 Sep 2026 22:31:11 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-144f29dc903sm2029025c88.3.2026.09.21.22.31.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 22:31:09 -0700 (PDT) From: Bhargava Marreddy To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, andrew+netdev@lunn.ch, horms@kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, vsrama-krishna.nemani@broadcom.com, vikas.gupta@broadcom.com, Bhargava Marreddy , Dharmender Garg Subject: [PATCH net-next v2 6/6] bnge: Create NQ0 during probe and keep active across open/close Date: Tue, 22 Sep 2026 10:59:04 +0530 Message-ID: <20260922052904.59237-7-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260922052904.59237-1-bhargava.marreddy@broadcom.com> References: <20260922052904.59237-1-bhargava.marreddy@broadcom.com> 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 X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e Content-Type: text/plain; charset="utf-8" Set up NQ0 during probe and free it at remove. Skip NQ0 in open/close ring, IRQ, and NAPI helpers once BNGE_NAPI_NQ0 is set. bnge_reinit_nq0() re-creates NQ0 on open if its MSI-X vector no longer matches the aux device's current reservation. Also guard bnge_napi_poll() against stale completions for rings freed by bnge_free_nq_tree(). Since NQ0 now needs its own MSI-X vector, fix bnge_alloc_irqs() to require "aux_msix + min" vectors instead of just "aux_msix". Signed-off-by: Bhargava Marreddy Reviewed-by: Dharmender Garg Reviewed-by: Vikas Gupta --- .../net/ethernet/broadcom/bnge/bnge_netdev.c | 255 +++++++++++++++++- .../net/ethernet/broadcom/bnge/bnge_resc.c | 2 +- .../net/ethernet/broadcom/bnge/bnge_rmem.c | 3 +- .../net/ethernet/broadcom/bnge/bnge_txrx.c | 15 ++ 4 files changed, 261 insertions(+), 14 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net= /ethernet/broadcom/bnge/bnge_netdev.c index 1c12282d7e88..c19b51221fa8 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c @@ -26,6 +26,10 @@ #include "bnge_rmem.h" #include "bnge_txrx.h" =20 +static void bnge_free_nq0(struct bnge_net *bn, bool locked); +static int bnge_setup_nq0(struct bnge_net *bn, bool locked); +static int bnge_reinit_nq0(struct bnge_net *bn); + #define BNGE_RING_TO_TC_OFF(bd, tx) \ ((tx) % (bd)->tx_nr_rings_per_tc) =20 @@ -527,6 +531,9 @@ static void bnge_free_nq_arrays(struct bnge_net *bn) for (i =3D 0; i < bd->nq_nr_rings; i++) { struct bnge_napi *bnapi =3D bn->bnapi[i]; =20 + if (BNGE_NQ0_NAPI(bnapi)) + continue; + bnge_free_nq_desc_arr(&bnapi->nq_ring); } } @@ -539,6 +546,9 @@ static int bnge_alloc_nq_arrays(struct bnge_net *bn) for (i =3D 0; i < bd->nq_nr_rings; i++) { struct bnge_napi *bnapi =3D bn->bnapi[i]; =20 + if (BNGE_NQ0_NAPI(bnapi)) + continue; + rc =3D bnge_alloc_nq_desc_arr(&bnapi->nq_ring, bn->cp_nr_pages); if (rc) goto err_free_nq_arrays; @@ -564,7 +574,8 @@ static void bnge_free_nq_tree(struct bnge_net *bn) nqr =3D &bnapi->nq_ring; ring =3D &nqr->ring_struct; =20 - bnge_free_ring(bd, &ring->ring_mem); + if (!BNGE_NQ0_NAPI(bnapi)) + bnge_free_ring(bd, &ring->ring_mem); =20 if (!nqr->cp_ring_arr) continue; @@ -664,11 +675,13 @@ static int bnge_alloc_nq_tree(struct bnge_net *bn) nqr->bnapi =3D bnapi; ring =3D &nqr->ring_struct; =20 - rc =3D bnge_alloc_ring(bd, &ring->ring_mem); - if (rc) - goto err_free_nq_tree; + if (!BNGE_NQ0_NAPI(bnapi)) { + rc =3D bnge_alloc_ring(bd, &ring->ring_mem); + if (rc) + goto err_free_nq_tree; =20 - ring->map_idx =3D ulp_msix + i; + ring->map_idx =3D ulp_msix + i; + } =20 if (i < bd->rx_nr_rings) { cp_count++; @@ -1252,6 +1265,10 @@ static int bnge_init_ring_grps(struct bnge_net *bn, = bool irq_re_init) bn->grp_info[i].fw_grp_id =3D INVALID_HW_RING_ID; bn->grp_info[i].rx_fw_ring_id =3D INVALID_HW_RING_ID; bn->grp_info[i].agg_fw_ring_id =3D INVALID_HW_RING_ID; + + if (BNGE_NQ0_NAPI(bn->bnapi[i])) + continue; + bn->grp_info[i].nq_fw_ring_id =3D INVALID_HW_RING_ID; } =20 @@ -1270,6 +1287,9 @@ static int bnge_alloc_bnapi_mem(struct bnge_net *bn) int i, size, arr_size; void *bnapi; =20 + if (!bd->nq_nr_rings) + return -ENOMEM; + arr_size =3D L1_CACHE_ALIGN(sizeof(struct bnge_napi *) * bd->nq_nr_rings); size =3D L1_CACHE_ALIGN(sizeof(struct bnge_napi)); @@ -1407,6 +1427,10 @@ static int bnge_alloc_core(struct bnge_net *bn) if (rc) goto err_free_core; =20 + rc =3D bnge_reinit_nq0(bn); + if (rc) + goto err_free_core; + bnge_quiesce_nq0(bn); rc =3D bnge_alloc_nq_tree(bn); if (rc) @@ -1455,8 +1479,11 @@ static void bnge_init_nq_tree(struct bnge_net *bn) struct bnge_nq_ring_info *nqr =3D &bn->bnapi[i]->nq_ring; struct bnge_ring_struct *ring =3D &nqr->ring_struct; =20 - nqr->nq_raw_cons =3D 0; - ring->fw_ring_id =3D INVALID_HW_RING_ID_32BIT; + if (!BNGE_NQ0_NAPI(bn->bnapi[i])) { + nqr->nq_raw_cons =3D 0; + ring->fw_ring_id =3D INVALID_HW_RING_ID_32BIT; + } + for (j =3D 0; j < nqr->cp_ring_count; j++) { struct bnge_cp_ring_info *cpr =3D &nqr->cp_ring_arr[j]; =20 @@ -1983,6 +2010,9 @@ static int bnge_hwrm_nq_ring_alloc(struct bnge_net *b= n, int index) u32 map_idx; int rc; =20 + if (BNGE_NQ0_NAPI(bnapi)) + return 0; + nqr =3D &bnapi->nq_ring; ring =3D &nqr->ring_struct; map_idx =3D ring->map_idx; @@ -2007,6 +2037,171 @@ static int bnge_hwrm_nq_ring_alloc(struct bnge_net = *bn, int index) return 0; } =20 +static void bnge_free_nq0(struct bnge_net *bn, bool locked) +{ + struct bnge_nq_ring_info *nqr; + struct bnge_ring_struct *ring; + struct bnge_dev *bd =3D bn->bd; + struct bnge_napi *bnapi; + struct bnge_irq *irq; + + if (!bn->bnapi) + return; + + bnapi =3D bn->bnapi[BNGE_NQ0_NAPI_IDX]; + if (!BNGE_NQ0_NAPI(bnapi)) + return; + + nqr =3D &bnapi->nq_ring; + ring =3D &nqr->ring_struct; + irq =3D &bd->irq_tbl[ring->map_idx]; + + if (locked) + napi_disable_locked(&bnapi->napi); + else + napi_disable(&bnapi->napi); + + synchronize_irq(irq->vector); + bnge_db_nq(bn, &nqr->nq_db, nqr->nq_raw_cons); + + if (irq->have_cpumask) { + irq_set_affinity_hint(irq->vector, NULL); + free_cpumask_var(irq->cpu_mask); + irq->have_cpumask =3D 0; + } + free_irq(irq->vector, bnapi); + irq->requested =3D 0; + + if (locked) + __netif_napi_del_locked(&bnapi->napi); + else + netif_napi_del(&bnapi->napi); + + synchronize_net(); + + hwrm_ring_free_send_msg(bn, ring, + RING_FREE_REQ_RING_TYPE_NQ, + INVALID_HW_RING_ID); + ring->fw_ring_id =3D INVALID_HW_RING_ID; + if (bn->grp_info) + bn->grp_info[0].nq_fw_ring_id =3D INVALID_HW_RING_ID; + + clear_bit(BNGE_NAPI_QUIESCED, &bnapi->flags); + clear_bit(BNGE_NAPI_NQ0, &bnapi->flags); + + bnge_free_ring(bd, &ring->ring_mem); + bnge_free_nq_desc_arr(nqr); +} + +static int bnge_setup_nq0(struct bnge_net *bn, bool locked) +{ + struct bnge_nq_ring_info *nqr; + struct bnge_ring_struct *ring; + struct bnge_dev *bd =3D bn->bd; + struct bnge_napi *bnapi; + struct bnge_irq *irq; + int map_idx, rc; + + bnapi =3D bn->bnapi[BNGE_NQ0_NAPI_IDX]; + if (BNGE_NQ0_NAPI(bnapi)) + return 0; + + nqr =3D &bnapi->nq_ring; + ring =3D &nqr->ring_struct; + rc =3D bnge_alloc_nq_desc_arr(&bnapi->nq_ring, bn->cp_nr_pages); + if (rc) + return -ENOMEM; + + nqr->nq_raw_cons =3D 0; + bnge_init_nq_ring_struct(bn, nqr); + rc =3D bnge_alloc_ring(bd, &ring->ring_mem); + if (rc) + goto err_free_nq_desc_arr; + + map_idx =3D bnge_aux_get_msix(bd); + ring->map_idx =3D map_idx; + irq =3D &bd->irq_tbl[map_idx]; + irq->handler =3D bnge_msix; + + if (locked) + netif_napi_add_config_locked(bn->netdev, &bnapi->napi, + bnge_napi_poll, bnapi->index); + else + netif_napi_add_config(bn->netdev, &bnapi->napi, + bnge_napi_poll, bnapi->index); + + snprintf(irq->name, sizeof(bd->irq_tbl[0].name), "%s-%s-%d", "bnge", + "nq", map_idx); + rc =3D request_irq(irq->vector, irq->handler, 0, irq->name, bnapi); + if (rc) + goto err_del_napi; + + if (locked) + netif_napi_set_irq_locked(&bnapi->napi, irq->vector); + else + netif_napi_set_irq(&bnapi->napi, irq->vector); + irq->requested =3D 1; + + if (zalloc_cpumask_var(&irq->cpu_mask, GFP_KERNEL)) { + int numa_node =3D dev_to_node(&bd->pdev->dev); + int cpu =3D cpumask_local_spread(BNGE_NQ0_NAPI_IDX, numa_node); + + irq->have_cpumask =3D 1; + cpumask_set_cpu(cpu, irq->cpu_mask); + if (irq_set_affinity_hint(irq->vector, irq->cpu_mask)) { + netdev_warn(bn->netdev, + "Set affinity failed, IRQ =3D %d\n", + irq->vector); + } + } + + rc =3D bnge_hwrm_nq_ring_alloc(bn, BNGE_NQ0_NAPI_IDX); + if (rc) + goto err_free_irq; + + if (locked) + napi_enable_locked(&bnapi->napi); + else + napi_enable(&bnapi->napi); + + bnge_db_nq_arm(bn, &nqr->nq_db, nqr->nq_raw_cons); + + set_bit(BNGE_NAPI_NQ0, &bnapi->flags); + + return 0; + +err_free_irq: + if (irq->have_cpumask) { + irq_set_affinity_hint(irq->vector, NULL); + free_cpumask_var(irq->cpu_mask); + irq->have_cpumask =3D 0; + } + free_irq(irq->vector, bnapi); + irq->requested =3D 0; +err_del_napi: + if (locked) + __netif_napi_del_locked(&bnapi->napi); + else + netif_napi_del(&bnapi->napi); + bnge_free_ring(bd, &ring->ring_mem); +err_free_nq_desc_arr: + bnge_free_nq_desc_arr(nqr); + return rc; +} + +static int bnge_reinit_nq0(struct bnge_net *bn) +{ + struct bnge_napi *bnapi =3D bn->bnapi[BNGE_NQ0_NAPI_IDX]; + struct bnge_dev *bd =3D bn->bd; + + if (BNGE_NQ0_NAPI(bnapi) && + bnapi->nq_ring.ring_struct.map_idx =3D=3D bnge_aux_get_msix(bd)) + return 0; + + bnge_free_nq0(bn, true); + return bnge_setup_nq0(bn, true); +} + static int bnge_hwrm_ring_alloc(struct bnge_net *bn) { struct bnge_dev *bd =3D bn->bd; @@ -2419,6 +2614,9 @@ static void bnge_disable_int(struct bnge_net *bn) struct bnge_nq_ring_info *nqr; struct bnge_ring_struct *ring; =20 + if (BNGE_NQ0_NAPI(bnapi)) + continue; + nqr =3D &bnapi->nq_ring; ring =3D &nqr->ring_struct; =20 @@ -2434,8 +2632,12 @@ static void bnge_disable_int_sync(struct bnge_net *b= n) =20 bnge_disable_int(bn); for (i =3D 0; i < bd->nq_nr_rings; i++) { - int map_idx =3D bnge_cp_num_to_irq_num(bn, i); + int map_idx; =20 + if (BNGE_NQ0_NAPI(bn->bnapi[i])) + continue; + + map_idx =3D bnge_cp_num_to_irq_num(bn, i); synchronize_irq(bd->irq_tbl[map_idx].vector); } } @@ -2449,6 +2651,9 @@ static void bnge_enable_int(struct bnge_net *bn) struct bnge_napi *bnapi =3D bn->bnapi[i]; struct bnge_nq_ring_info *nqr; =20 + if (BNGE_NQ0_NAPI(bnapi)) + continue; + nqr =3D &bnapi->nq_ring; bnge_db_nq_arm(bn, &nqr->nq_db, nqr->nq_raw_cons); } @@ -2465,6 +2670,8 @@ static void bnge_disable_napi(struct bnge_net *bn) for (i =3D 0; i < bd->nq_nr_rings; i++) { struct bnge_napi *bnapi =3D bn->bnapi[i]; =20 + if (BNGE_NQ0_NAPI(bnapi)) + continue; napi_disable_locked(&bnapi->napi); } } @@ -2481,6 +2688,8 @@ static void bnge_enable_napi(struct bnge_net *bn) bnapi->in_reset =3D false; bnapi->tx_fault =3D 0; =20 + if (BNGE_NQ0_NAPI(bnapi)) + continue; napi_enable_locked(&bnapi->napi); } } @@ -2629,6 +2838,9 @@ static void bnge_hwrm_ring_free(struct bnge_net *bn, = bool close_path) for (j =3D 0; j < nqr->cp_ring_count && nqr->cp_ring_arr; j++) bnge_hwrm_cp_ring_free(bn, &nqr->cp_ring_arr[j]); =20 + if (BNGE_NQ0_NAPI(bnapi)) + continue; + ring =3D &nqr->ring_struct; if (ring->fw_ring_id !=3D INVALID_HW_RING_ID_32BIT) { hwrm_ring_free_send_msg(bn, ring, @@ -2690,6 +2902,9 @@ static void bnge_free_irq(struct bnge_net *bn) for (i =3D 0; i < bd->nq_nr_rings; i++) { int map_idx =3D bnge_cp_num_to_irq_num(bn, i); =20 + if (BNGE_NQ0_NAPI(bn->bnapi[i])) + continue; + irq =3D &bd->irq_tbl[map_idx]; if (irq->requested) { if (irq->have_cpumask) { @@ -2718,6 +2933,9 @@ static int bnge_request_irq(struct bnge_net *bn) int map_idx =3D bnge_cp_num_to_irq_num(bn, i); struct bnge_irq *irq =3D &bd->irq_tbl[map_idx]; =20 + if (BNGE_NQ0_NAPI(bn->bnapi[i])) + continue; + rc =3D request_irq(irq->vector, irq->handler, 0, irq->name, bn->bnapi[i]); if (rc) @@ -2732,12 +2950,10 @@ static int bnge_request_irq(struct bnge_net *bn) irq->have_cpumask =3D 1; cpumask_set_cpu(cpumask_local_spread(i, numa_node), irq->cpu_mask); - rc =3D irq_set_affinity_hint(irq->vector, irq->cpu_mask); - if (rc) { + if (irq_set_affinity_hint(irq->vector, irq->cpu_mask)) { netdev_warn(bn->netdev, "Set affinity failed, IRQ =3D %d\n", irq->vector); - goto err_free_irq; } } } @@ -2857,6 +3073,10 @@ static void bnge_init_napi(struct bnge_net *bn) =20 for (i =3D 0; i < bd->nq_nr_rings; i++) { bnapi =3D bn->bnapi[i]; + + if (BNGE_NQ0_NAPI(bnapi)) + continue; + netif_napi_add_config_locked(bn->netdev, &bnapi->napi, bnge_napi_poll, bnapi->index); } @@ -2875,6 +3095,9 @@ static void bnge_del_napi(struct bnge_net *bn) for (i =3D 0; i < bd->nq_nr_rings; i++) { struct bnge_napi *bnapi =3D bn->bnapi[i]; =20 + if (BNGE_NQ0_NAPI(bnapi)) + continue; + __netif_napi_del_locked(&bnapi->napi); } =20 @@ -3610,14 +3833,20 @@ int bnge_netdev_alloc(struct bnge_dev *bd, int max_= irqs) if (rc) goto err_free_bnapi_mem; =20 + rc =3D bnge_setup_nq0(bn, false); + if (rc) + goto err_free_ring_grps; + rc =3D register_netdev(netdev); if (rc) { dev_err(bd->dev, "Register netdev failed rc: %d\n", rc); - goto err_free_ring_grps; + goto err_free_nq0; } =20 return 0; =20 +err_free_nq0: + bnge_free_nq0(bn, false); err_free_ring_grps: bnge_free_ring_grps(bn); err_free_bnapi_mem: @@ -3640,6 +3869,8 @@ void bnge_netdev_free(struct bnge_dev *bd) =20 unregister_netdev(netdev); =20 + bnge_free_nq0(bn, false); + timer_shutdown_sync(&bn->timer); cancel_work_sync(&bn->sp_task); bn->sp_event =3D 0; diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_resc.c b/drivers/net/e= thernet/broadcom/bnge/bnge_resc.c index 4711dd4945ff..7c26943c5cb3 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_resc.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_resc.c @@ -382,7 +382,7 @@ int bnge_alloc_irqs(struct bnge_dev *bd) irqs_demand =3D pci_alloc_irq_vectors(bd->pdev, min, irqs_demand, PCI_IRQ_MSIX); aux_msix =3D bnge_aux_get_msix(bd); - if (irqs_demand < 0 || irqs_demand < aux_msix) { + if (irqs_demand < 0 || irqs_demand < aux_msix + min) { rc =3D -ENODEV; goto err_free_irqs; } diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c b/drivers/net/e= thernet/broadcom/bnge/bnge_rmem.c index e0ddb2800c54..22fd4eeb3213 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_rmem.c @@ -450,7 +450,8 @@ void bnge_init_ring_struct(struct bnge_net *bn) struct bnge_tx_ring_info *txr; struct bnge_ring_struct *ring; =20 - bnge_init_nq_ring_struct(bn, &bnapi->nq_ring); + if (!BNGE_NQ0_NAPI(bnapi)) + bnge_init_nq_ring_struct(bn, &bnapi->nq_ring); =20 rxr =3D bnapi->rx_ring; if (!rxr) diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_txrx.c b/drivers/net/e= thernet/broadcom/bnge/bnge_txrx.c index 7d45e057f2e8..dcec6fdced30 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_txrx.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_txrx.c @@ -1375,6 +1375,21 @@ int bnge_napi_poll(struct napi_struct *napi, int bud= get) break; =20 idx =3D BNGE_NQ_HDL_IDX(idx); + + /* NQ0 keeps running while administratively down to + * process async events, but its cp_ring_arr is torn + * down (and cp_ring_count zeroed) by + * bnge_free_nq_tree() while down. Guard against a + * stray/late CQ notification arriving in that state + * instead of dereferencing a freed or out-of-range + * cp_ring_arr. + */ + if (unlikely(!nqr->cp_ring_arr || + idx >=3D nqr->cp_ring_count)) { + raw_cons =3D NEXT_RAW_CMP(raw_cons); + continue; + } + cpr =3D &nqr->cp_ring_arr[idx]; cpr->had_nqe_notify =3D 1; cpr->toggle =3D NQE_CN_TOGGLE(type); --=20 2.47.3