From nobody Sat Sep 26 11:48:09 2026 Received: from mail-pl1-f227.google.com (mail-pl1-f227.google.com [209.85.214.227]) (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 9468443E08F for ; Tue, 1 Sep 2026 19:18:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.227 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290295; cv=none; b=XUV+UIS/YvQy571AdaUg6wkWyrRlSDwU2cfp2MPZLLeW6mAyoraZ5wrpct+/VVCjn3SzTmRqlWncKu2cUYohMfBIedHjloTdWInZsrpqbIA1dPxdji1kMsOxnDxnEDVGZGoGtYQrXo6hluzKeG9PJCZDRoWejdgoygQeM66fgnY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290295; c=relaxed/simple; bh=N/tCHeYqR6Ax1LGbE9004IWszWIiHPljP/W/diJ1iHY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KphNzHRkevM1fg2iS4yA+AVO6MBPRkQT8FB8YA/AeB3ztkhzWM8vOKoU9T6REq5ko8VoccaDmObj9J81dqIEQk57750B5zHeRN1W/VO36ug4ZwdyVtonsU6J6y/qNo3FfpuMolYJ8sqg1eI8J8LKL75HtlqoB4iWEngSN9214uY= 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=LyYJhfKb; arc=none smtp.client-ip=209.85.214.227 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="LyYJhfKb" Received: by mail-pl1-f227.google.com with SMTP id d9443c01a7336-2d91518a63fso1477625ad.0 for ; Tue, 01 Sep 2026 12:18:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788290293; x=1788895093; 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=XV4iTp1dLb8Uvgeqz0AL8wZ3RxxmiSYklSPq0glGVL4=; b=qSYqYU0CWQqM8zlFGaLWm/2C1Kii+F3tnhw1SDLZI4cGxyx9OUW0YiyhjK93otfgR8 oYjrmx/O80Rh7tUqLDk1YSDakhNeOPBQCpoUBz5MSwClgS3omwPDBm+RZ9mkl0MQfk8n Rcbzw5AoHuhCF/IBb9BRX/qsjLV5NTjkgEeuSZkdFyVequBcJYMLOeCx+cuTpsw0jkWY RgIZxqeS1IyUC+iu1xxES+TV4R9iGPbmfwslJlhcmRg9NBgG+JgSWXw7YCkjSr7yKlUu KnM81O2CmLW4/su3CuN8JqLvhemvGfONvG0wyU3jDdN2epGrWJbwXXh5w8z0TN768v98 sVaQ== X-Forwarded-Encrypted: i=1; AHgh+RqRXN32Tsn2iKV5L/ZdtKlZw/e1oerq1kTUPdMUvVYXJxJet9IbSs/Bx1ftqagOjMzT6uRGYP6o9MMPSuw=@vger.kernel.org X-Gm-Message-State: AFuF++ntReK5XDd9SwxLiQsS8U/WaaUWjPWsacz719kF2gFwRtfBjeIq Q79qZ1olE7TlNgjn1WJLT0aJ4oZC+MIkNyh2m+j/Khp2ds3+XrZusTXxEmiEOWQCy0EUOutQwIt W55/+ISkz42EmMkwqGUmFlBLl8BbLKwFPGfVUmeDnf3b1uTQYWhJavWn+ZGfD03QH1nEnChQCG+ VsdK6gE/H+vxto/qHICA7KeGyMjmwaflXfsi3MVYMM9DbGp1qUtcr0eNUSyY+m+Zp/+Qtg7jqxZ WelHvBO4/v2i2TR3270K265qg== X-Gm-Gg: AYBFou27jSWcYKEqW+bzteMcH+HK4h2v4ueSLWGaooBT5rX6XuuTXz3oCNNbRshc9Y9 JVxkBZndB0iWjXL2ePfKe47DONI6Pij4q/90hZSstEpiGdVCElzF0hJUKHsT9l3s8Byfi6yRLzK MwST0Ygn056S61wcPjKEAngTHNAvjdjpflywSXFP2AKx8UTnB3zTVYDvq8th6oC1NVGcDt510ke bMh3p50nz9qN/qvZMe4EniMZj2PRbeXIir5tOF7i3WiUy2Wwd859x7YQH3MXaijkmqnxkC7pETG sP2IUfpBTf8cmQvYUjo6ZB2xDoegXLeF279fwQF5ZJjTMXE/3UUgTgsfGC0X92q8qVe173aj+/f nDUzxJbYssdckT8dQ+JmrARSQJBifRrJVvPOhgDKjDww2OjqkTUzBvxkY990BY8Aac/zwPNincq dnnWTtwfLJqdu9eEntTuQqvEYll7RVS44hg5sSEZUl3g== X-Received: by 2002:a17:902:d483:b0:2d7:4b42:9352 with SMTP id d9443c01a7336-2d74dca231amr539687305ad.3.1788290292796; Tue, 01 Sep 2026 12:18:12 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-16.dlp.protect.broadcom.com. [144.49.247.16]) by smtp-relay.gmail.com with ESMTPS id d9443c01a7336-2dadd43929dsm310825ad.26.2026.09.01.12.18.12 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 01 Sep 2026 12:18:12 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-3968bb86fb7so236029a91.2 for ; Tue, 01 Sep 2026 12:18:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1788290291; x=1788895091; 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=XV4iTp1dLb8Uvgeqz0AL8wZ3RxxmiSYklSPq0glGVL4=; b=LyYJhfKbu5pbUiGpoFvfMMEDQS5cMYyptd42JFZY6boLz0XaZZBLH84dG59aaxtWHE KQAq2WSNbqJU2I9RvOqJdT7vLrb+jNWDW28TuBJdPI0tEnVncTfyqSUukQj67KHZBJ5G RFG+ABRI9yU9A7YBtVIIlZhOJbWDFoXYeH0i0= X-Forwarded-Encrypted: i=1; AKwUvByiC4V95ciswa9oIGZsCyMymna9bWR0NUeZGeG33PqDVntrjGho6wvxod/pjRrcteEKdPtY4+YqNUzySWI=@vger.kernel.org X-Received: by 2002:a17:90b:1811:b0:398:e86b:ce14 with SMTP id 98e67ed59e1d1-398e86bcf08mr22289975a91.20.1788290290921; Tue, 01 Sep 2026 12:18:10 -0700 (PDT) X-Received: by 2002:a17:90b:1811:b0:398:e86b:ce14 with SMTP id 98e67ed59e1d1-398e86bcf08mr22289890a91.20.1788290290346; Tue, 01 Sep 2026 12:18:10 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-32f07b79cf9sm186440eec.18.2026.09.01.12.18.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:18: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 , Rajashekar Hudumula Subject: [PATCH net-next 1/7] bnge: Extract bnapi allocation and cleanup into helpers Date: Wed, 2 Sep 2026 00:47:22 +0530 Message-ID: <20260901191728.643212-2-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901191728.643212-1-bhargava.marreddy@broadcom.com> References: <20260901191728.643212-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. This is a pure refactor with no functional changes, preparing the driver to move bnapi allocation out of the open/close path. Signed-off-by: Bhargava Marreddy Reviewed-by: Vikas Gupta Reviewed-by: Rajashekar Hudumula --- .../net/ethernet/broadcom/bnge/bnge_netdev.c | 29 +++++++++++++++---- 1 file changed, 23 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..dbadbf76a3a9 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c @@ -1195,6 +1195,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 +1217,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 +1231,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 +1245,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 Sat Sep 26 11:48:09 2026 Received: from mail-pj1-f98.google.com (mail-pj1-f98.google.com [209.85.216.98]) (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 7F9CF4A2065 for ; Tue, 1 Sep 2026 19:18:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.98 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290301; cv=none; b=ahrkY0vrRqfqNBUlh642CToBCTbI0rcAW5iuGph8pqkSgpHHdul1HCZQXxPKzaWAGyJnSSmuU2fIr1H596MF/KoWSjmOOZrxJe53s61p7ybxZxf6wPMGSDXHm+zqsn8b4vHd9z3Sbzg+CJ9RCLD63eNCMZ9Lc5jB2L2U3vcNUOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290301; c=relaxed/simple; bh=oFPz7pp/mMILcTgKcPtfBr0KKYhYwd5s3DTyKq5yXs8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LpfOM2ZP0gQx4Euc2+oIlESY9aYWhsSGjsHe9MDuR1rvH3dDiUQ9v+O5p7jCx2EDnEWGDf+q3SHqdWRn3ISGGjrRy9qgLTYDdg8xdWAmYqntzJ9l3oOptQBKqGUFC2AYvL/JqqC9xC3CRCedLRC+i6WMihrDxKEmAImCRj2/+nQ= 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=au4ctlrj; arc=none smtp.client-ip=209.85.216.98 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="au4ctlrj" Received: by mail-pj1-f98.google.com with SMTP id 98e67ed59e1d1-3964dfb5b9aso242206a91.1 for ; Tue, 01 Sep 2026 12:18:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788290298; x=1788895098; 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=pGqPXgPgllirzMXMpaUakGPcJZSVGhd46PFeQ76evwg=; b=q+rZwJGMummHdY9tcg8UAtzB9cYw4LqDzJhscpM3chjnR+wPM7Iy1338Pr/xiyuo4O mBUAc8YP0JAQygJ/C5BFDLEdkB+qstyO++vVRcd5Xfc3vUYcQpCeG5rl1LuJ2NP+veyk HAXRrCNYAybWnjrIfdAsWR3hrE1a5LzvS1pRQoHrqhFMyc3cVFqpC3xEK6S7t1DB6GHK wM9pMi7u2TBVEKxnhPuLzNb+ZoCPUF1CP/g5pRZPTDM8ZzGPrUAsXYBIUPZWw6bv1RKK aCJ5CvFuWGaEE/iSvF/uwLt68YKhqDA7xQpXyTZthjbQAGvoEsA28ZGEgGpVl2uhU9AM y+9w== X-Forwarded-Encrypted: i=1; AKwUvBzKGjRHBrNf6O+xuy823fpVwYgYBWLjXymJ7vno7/X41w0XfHis+6JhaPxdjYbf2fhaFKgCLFMVKwWE/JI=@vger.kernel.org X-Gm-Message-State: AFuF++kWEdBHPTwi6dofpr0pd707V8l2B1Y69ABNh06N8XbohmE1Pohi QG8qDXs9S0+AnVCuFH2ySUv/uWA2pDyvbphROdixCLVkRWqyI/6uoKyLlbFQwICfalRsLyEXkAd C5yjefpEAeYN7i1KUb96pCflxe7du6p23T2jFN4bhEffQSKYPqoxIRoB8Fy2ksfxajiQVYh0A00 69sc95UZMV9P3iziMo+G+uBAAcZUHOro3eH4CkCbFag3VQ2kGzBM7smX/RppWRcT0wQOJvCMqvh xwDeR2A2crvBKGU41fo6R89dQ== X-Gm-Gg: AYBFou36jLKY7KhsTRCZ4hoEZnBOFR1BWBwJHE2eIG06z/k13R+5nbgLZ7/xVVtxz/X NE58vKr7sZ8XSUVHpc4dOMTV8SQxxdJFYPqyH5IjQt+266DDLZbOrM4CoG6zZy26iQfZZ6E4dFv w55dnSHVubXGUtVtpOMlqRZwxV2Fp2HqXREZjfG8sl3a2BLNoGzdo4RFpO7qLmUQmn6OG6Dz8ro CA1qnd+zrsu0/PRz17dgJmsWUsjdylScMmpr7os6Czrva2lwkcJpgb1+fjN7o/IPQYQb4vjdtys qsnYg9PzxN3t0duB0oc5ORxhJBnpWDNERc27CelkuymxXoh67ndqUz8GCjuL4WvjxOMZyAhGEtd v4dLscrYPexytTmS7iKUKpvcnIkJimogDrlhIsZLEmWY+DZvJEnHSZ9EPzCbe97aZMK7/8T+Cfr BhmvjTW6HutvvDRgy6ePESIMf4QkRuEXVNwDfwuvLTFQ== X-Received: by 2002:a17:90b:3c82:b0:38e:bfe:81e9 with SMTP id 98e67ed59e1d1-39ae824fb5fmr469698a91.1.1788290298261; Tue, 01 Sep 2026 12:18:18 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-20.dlp.protect.broadcom.com. [144.49.247.20]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-39ae0f40e5asm215584a91.3.2026.09.01.12.18.17 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 01 Sep 2026 12:18:18 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2d55d8cd938so2415665ad.1 for ; Tue, 01 Sep 2026 12:18:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1788290296; x=1788895096; 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=pGqPXgPgllirzMXMpaUakGPcJZSVGhd46PFeQ76evwg=; b=au4ctlrjYdSkorJD0eu0RYZFRvCqt5b4dgrxFAra4bLBEEHmcs+VIGOieAcg35NuQx odSCoHsrJJohycNPa5uGEajuPA5/TdkO/DgjDZhVY8qNWv+yCzoB8AvtjDEaoTN/2dZc Q5ZgamViCUhzYv2eUKifPoMWElrUIXiG6WgNg= X-Forwarded-Encrypted: i=1; AKwUvByocB/L9IlZ4soEyQ3kpugh8nTz5SGKMjf1UwTbmXIS2K+K+YQOU5PnAFSnMlhgmqjFklNl5Z56072EbqQ=@vger.kernel.org X-Received: by 2002:a17:903:22ca:b0:2d9:51db:7eaa with SMTP id d9443c01a7336-2dae5efaa55mr7201665ad.20.1788290296179; Tue, 01 Sep 2026 12:18:16 -0700 (PDT) X-Received: by 2002:a17:903:22ca:b0:2d9:51db:7eaa with SMTP id d9443c01a7336-2dae5efaa55mr7200775ad.20.1788290295674; Tue, 01 Sep 2026 12:18:15 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-32f07b79cf9sm186440eec.18.2026.09.01.12.18.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:18:15 -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 2/7] bnge: Extract per-NQ ring allocation and init helpers Date: Wed, 2 Sep 2026 00:47:23 +0530 Message-ID: <20260901191728.643212-3-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901191728.643212-1-bhargava.marreddy@broadcom.com> References: <20260901191728.643212-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 | 56 +++++++++++-------- .../net/ethernet/broadcom/bnge/bnge_rmem.c | 25 ++++++--- .../net/ethernet/broadcom/bnge/bnge_rmem.h | 4 +- 3 files changed, 52 insertions(+), 33 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net= /ethernet/broadcom/bnge/bnge_netdev.c index dbadbf76a3a9..6c1cb3aab5a8 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c @@ -1909,6 +1909,37 @@ 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 =3D &bnapi->nq_ring; + struct bnge_ring_struct *ring =3D &nqr->ring_struct; + u32 type =3D HWRM_RING_ALLOC_NQ; + struct bnge_dev *bd =3D bn->bd; + u32 map_idx =3D ring->map_idx; + unsigned int vector; + int rc; + + 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; @@ -1917,30 +1948,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 Sat Sep 26 11:48:09 2026 Received: from mail-yw1-f226.google.com (mail-yw1-f226.google.com [209.85.128.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 6EFA2375F95 for ; Tue, 1 Sep 2026 19:18:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290306; cv=none; b=CErd4l13t5tB28SXunvwLvG2+UBcpLTMzGbNe5FYppKjUCSr3gjTVEpFwu5EJRWboLYKCwWTmhPKSOTIVU6T/qAZxhUsOKMp8Ccq302WkKAQfrS3ST6dcjdQxMvO6xHtcTB7qsYO7oLFeyX+g7IxEmqlMSToktBiw1RWSKxQdXo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290306; c=relaxed/simple; bh=CfM0eijYTe4EMwggRuAtJSxshQBNNr2dyu8Y/j11nu0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ExU4nl1QYbrHMzIsjztfzXZ3clc68JuNlSIoBS4o5xczsrNnguo4E8oHTR0FoSpvCABPKaJOutHLpcAtktxbobz6MKb/NGJQ7zvLRqDH/ymAI4pysWt1hU5p5vJTjT9exPHEad7mYZUWBKxwKSOUIJI5qXQLVqfrtgTW58LxYGw= 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=a7xZAQtd; arc=none smtp.client-ip=209.85.128.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="a7xZAQtd" Received: by mail-yw1-f226.google.com with SMTP id 00721157ae682-85a50f6a7f7so4869657b3.2 for ; Tue, 01 Sep 2026 12:18:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788290303; x=1788895103; 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=2Qt4ErnHA2TyAOzZ5lGY+0BQOly+HcEnFTD0zMWHD+M=; b=QVIXapfHA8CRjgV2ZMpO+kli0fRAGNt85LYhfDI4lHOQA9niEGyYDsVpAMOVpq3Vcp DAXTF0yQnkW33kdgm0y0FaCOAPglnv5jTBatNktOXcL8KVRSjT5KCwkuLaL8OGTjbrup hSJVponBluMyHvD6NZpLOISja+F/CnCD8/42tQcPsGcjZFMwsyXju4sqZ1tkXNbEpXyA nxFWPWSkfRQEXzG8FFeCKmZbzRZNkMQo/qezdNF44RfadfyzbNSFaYDovbh0bSTNftr0 BYbWxpb0RkRguScEp8ZnQgvo7nPh+KFXbTRxlOFxJAL4QqBxJXMzyIBPVf2PU++geoPz BMFA== X-Forwarded-Encrypted: i=1; AKwUvByOII2TIxYDEUNAEuZnAkBMAP9c1UjAFr0lLRLIgfYs8V1tFAQ54K/US3bb+UrDjqyl2nLJJTrg6lNoAZ0=@vger.kernel.org X-Gm-Message-State: AFuF++kxoFcJTnkRpcjaaGJb7yNVsdA7wKvzg3hK4UDhqePjuXTPZAW8 G0NZ+GpbpGhqJEG/TWO93c+7irQjr8E9TXB7HM1WTdvFAr+ykMHrBOXayioojVPc7r1fVKiX88Y EVEzVIKc8skfgESE3V4TeFJ+oerMQoCOo5p81kKQRp/iLgA0ZRwSAx9oG7sM/xtggwKwJm9PV9R Rl2rtPTSzCHxa4nIj+pWUeAOGHHZATkY2yKRsQhiSgD9aNSdV/2GgqEENRSRSZPIP4QEmlYFF33 NDi1jxdfVkzrxRdTGzpaBUgUg== X-Gm-Gg: AYBFou1kUo+GZieZcVTcNLJHBrFBxhIDKOTB0SBQxCRLtWM5Kia1AmnQKGFh5Le2LB3 HedXsLO8Gq4Pl+b8aJ9jmmnpSz/KwFI1PjJB+If+Vgi9RcJ7+AijtdEbB99ek72UnPDavNf0RkZ EDScaC9oFshJkl8/bh+26fARpSjIK3ge09r7IDrkm/RxwMn+uOxhFH0W+Kg1VJg6B9Dk+in/Ki5 Bly/5+tV1SpNc2+yZX5deE8qCFCFUfa4UiOwqAWuoABXnymrgwiE8YSX/Zg+6XpKBoTTuhbiq1r 8B/8c4kVF9kGulHQvB/fbgmqqTExSvFzd/wfwREr6O0/SIGJeYpD3f8/0qQjgoPa6oLY2wbYs+s AfbBGgjCHIC/GNZ1FR8+kYZZJAAHZ30lkzEsSvGCYBd8GiDvGZbafMwuCLR9Yio7AHpm7haXewC dFbhtT6RA2OHsWc/0XM0O8rq0NxG/Zb+8IPCPmflvjwQ== X-Received: by 2002:a05:690c:e3e4:b0:868:505e:b97a with SMTP id 00721157ae682-86bef5a7f36mr3443527b3.10.1788290303122; Tue, 01 Sep 2026 12:18:23 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-23.dlp.protect.broadcom.com. [144.49.247.23]) by smtp-relay.gmail.com with ESMTPS id 00721157ae682-86c1726f0c6sm8777b3.28.2026.09.01.12.18.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 01 Sep 2026 12:18:23 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-39533bb224cso256636a91.3 for ; Tue, 01 Sep 2026 12:18:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1788290302; x=1788895102; 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=2Qt4ErnHA2TyAOzZ5lGY+0BQOly+HcEnFTD0zMWHD+M=; b=a7xZAQtdtrHAyZU8gVIHKW5VM2EVoTZ2boiQkjx4D5qM17r9aFAXdu5Q2XE5pQFV6N 26L7CVKqeKUfekkLzyjtWqXOD9e3ogdAedho5K9Qx6XabzyYvhQ/NBhLVggu3+qsplmw 0wkHk0ZM0Q6YLR1f5r+jJILiEnCzMoG6lbPYo= X-Forwarded-Encrypted: i=1; AKwUvBwLIeYYL+374DnTHMdR+wz5dUaFFv2wnHu905LcxzxSwfWxWVr1nkVzUsViCFzqrc9bu7cbiD3XTYeEqoU=@vger.kernel.org X-Received: by 2002:a17:90a:dfd0:b0:398:9beb:5c19 with SMTP id 98e67ed59e1d1-39ae847b3f2mr408074a91.20.1788290301828; Tue, 01 Sep 2026 12:18:21 -0700 (PDT) X-Received: by 2002:a17:90a:dfd0:b0:398:9beb:5c19 with SMTP id 98e67ed59e1d1-39ae847b3f2mr407974a91.20.1788290301253; Tue, 01 Sep 2026 12:18:21 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-32f07b79cf9sm186440eec.18.2026.09.01.12.18.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:18:20 -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 3/7] bnge: Move bnapi and ring_grp allocation to probe/remove Date: Wed, 2 Sep 2026 00:47:24 +0530 Message-ID: <20260901191728.643212-4-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901191728.643212-1-bhargava.marreddy@broadcom.com> References: <20260901191728.643212-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 | 108 ++++++++++++------ 2 files changed, 73 insertions(+), 37 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 6c1cb3aab5a8..dcf04d391570 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c @@ -1176,20 +1176,26 @@ 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; 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; bn->grp_info[i].nq_fw_ring_id =3D INVALID_HW_RING_ID; + + if (irq_re_init) + bn->grp_info[i].fw_stats_ctx =3D INVALID_HW_RING_ID; } =20 return 0; @@ -1201,25 +1207,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; @@ -1248,16 +1235,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; @@ -1393,6 +1416,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]; @@ -2834,9 +2858,7 @@ 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 @@ -2847,7 +2869,6 @@ static int bnge_init_nic(struct bnge_net *bn) =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; } @@ -3222,7 +3243,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; @@ -3544,14 +3565,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: @@ -3576,6 +3610,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 Sat Sep 26 11:48:09 2026 Received: from mail-yw1-f225.google.com (mail-yw1-f225.google.com [209.85.128.225]) (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 BDC314A2628 for ; Tue, 1 Sep 2026 19:18:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.225 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290312; cv=none; b=ValDcMUyAZym1JDaMejDo2f3Fr6yOJOyehxt/e/4HwNCxcwiT/xjYVTq/W/PzaotuRAfjudviQvVtNl4reW1rfYLZt4QasP8jEtHIqL/+xykk7SI4iw74RQudcpYWtTI8SdPfI+DYavZqnY2Hsg4KzwC3HP0gnfKh5KKBZfVr9M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290312; c=relaxed/simple; bh=cT8ZEKHAT8Xn1sHTU5bkljeWfxPtFrQE4WQVZMOBlIw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DECCFaJfFhfsINVVpBAx7WHwPyaZiD63qjrrSX6rcYloSSvZMo0cJmmDF0908elWeVG0jJFscxlHqfqY8P03ccNeG4jkAOF7jNgcbEmExKQwHCxoh2HSuA6d8Hv05R4tVCdHrRwqFT5Dwu1Vpg5hrI+59nAIpRZrPR0JaHvWDqw= 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=Cgjr5YKA; arc=none smtp.client-ip=209.85.128.225 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="Cgjr5YKA" Received: by mail-yw1-f225.google.com with SMTP id 00721157ae682-85a50f6a7f7so4870927b3.2 for ; Tue, 01 Sep 2026 12:18:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788290309; x=1788895109; 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=VqNDSMrUN5Hnu4Er0j5df3BDuTddzqevbT40udGtjGk=; b=pEVvTdDw5wiYtWSw5SZyofpcmI0iFxv6s5AfCIB0VQsIoQ8bZm0XBa6R0VoRvDq9/N CP3LO3QxGhxefsNBsUWSd7fuJEh6niIOUvVpGtc4RSY/I72DfRqyEZBVWXoRU1e5z8iD rtvvuMxmKLkZqyYMRb8Jn3cRyBCU6inzD3++kzVlUP2I63A1cYdnYIq23v5EqNQB9jpo qAoJ9BY4MtefhrHPiy/jnHzBxVT+rphIZZyq4cd9hLF7lQJdR7LF9ZGpJSPc9+Mt2GmH Ew12WhL0sLLPZPcNSUsKIfovR9Fh/2ZbqGk53onThPxDGUBBXOMknXO4b2ON1IeBdD+F FO2Q== X-Forwarded-Encrypted: i=1; AKwUvByOMno1wrnPYGbHfiE2opa/7PzrdoTTl5hRoyakKSCBFtRQ25VKF83/0x4k9fN/UcQgR5tLCAdLfpXq2fY=@vger.kernel.org X-Gm-Message-State: AFuF++lnP1xrsegHzUslAKq/AnL1PIvEL0wPyfaxvqKTKeoSShmACvp8 GEG25fEH8z/CGnP0ntbJh/cNDJolxfo/XmtJOkuDj7clvK4WbVR5Olon6bJpGv60zhh0Ubgpd3n LLaXYEhCSYFoGkEgXQV3gFk+pCtwg2nM1MGrwA3xYOBHv2YI7Zb/SnG8D7Esy0iC0ghSnDIDitd GTxT1gNNtnAFLaIWPq8iRxNU8fM0wMBSKt9co0kB06/Jcoie3T6MnkUk8hO+s7Nd40N2fp5kJIn ziAHHY8xfcv3/5ECAbinwbk2A== X-Gm-Gg: AYBFou2AsW4qIYouR+qMxlHdLOWRAhtr7hZ/JmFJgM2SUI0DDNrEAAWDCEdNpH4bO1V CnQAuQlJBfmdr87gMYeadpCwyuGZFn2/iq3QvTD2C9OuvDmAN1s6nA8sQO6zm1PIBtlULYuGtFJ V8ELdMSht3X8TYbc7vxfeVzaAQ3NswMwIPgFzjZDkfcmhOoXy3kgkB7gH1exEcVPJJYwKP+TniZ UwhB0Im7BzDLwteZHTjIydLvqI50HBOEqXWf7Tvm1UVf9O3bvQH46LzD9Q0SwqF5TN6j2duNjQM XUnD4i8sFuiutxoIh22Fa4YzJyODysYZFRb7QNUHP+J3WsnWHE/NVMNO7Ou/FrBrHs6LeYT7bfv HSSffNNoaHNCojMqEX040Q6XM3AbCqmffIQQs63jZ7CqjoqemZ4uCYZXqrnFbutOwdTxd7wPOqU OX+owS/e0r45+vU1ajoiQIjYRoAO7gthugS8yhu4n1Dg== X-Received: by 2002:a05:690e:160a:b0:66f:8a11:5dc0 with SMTP id 956f58d0204a3-66f98846c1bmr158768d50.29.1788290308505; Tue, 01 Sep 2026 12:18:28 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-23.dlp.protect.broadcom.com. [144.49.247.23]) by smtp-relay.gmail.com with ESMTPS id 956f58d0204a3-66f98592b85sm6958d50.11.2026.09.01.12.18.28 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 01 Sep 2026 12:18:28 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-398e1f7d1a5so324629a91.0 for ; Tue, 01 Sep 2026 12:18:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1788290307; x=1788895107; 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=VqNDSMrUN5Hnu4Er0j5df3BDuTddzqevbT40udGtjGk=; b=Cgjr5YKADieRgLJmSP1cYZrxOdBM+ODVUUcCzmjLaGMD6QrMKrSunfl+uj5nDblxLW aSQ8DltKqHi5ZtDolZG1lc6siKaPLIxQB/ZEuk0PH6CZ0lv/XGyAWE5J/ZzelDKhsq2z RKMqtu/iCal8BGFBHdTNpB8k5KojDCp291n9E= X-Forwarded-Encrypted: i=1; AKwUvBw5HNow/B+Cduzq8GAUg+1YJNZPm4tbCZVOns7mxFpbP2jIu2h8RqdWWKDe4ZBm7sBkqJgDkRP0/Sfrvpw=@vger.kernel.org X-Received: by 2002:a17:90a:d2c7:b0:37d:f983:7b5 with SMTP id 98e67ed59e1d1-39ae82bbdc5mr475257a91.9.1788290307071; Tue, 01 Sep 2026 12:18:27 -0700 (PDT) X-Received: by 2002:a17:90a:d2c7:b0:37d:f983:7b5 with SMTP id 98e67ed59e1d1-39ae82bbdc5mr475159a91.9.1788290306517; Tue, 01 Sep 2026 12:18:26 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-32f07b79cf9sm186440eec.18.2026.09.01.12.18.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:18:25 -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 4/7] bnge: Drop obsolete bn->bnapi NULL checks in open/close paths Date: Wed, 2 Sep 2026 00:47:25 +0530 Message-ID: <20260901191728.643212-5-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901191728.643212-1-bhargava.marreddy@broadcom.com> References: <20260901191728.643212-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 dcf04d391570..dc3d51f31e5e 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; @@ -1240,9 +1237,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; @@ -2371,9 +2365,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; @@ -2565,9 +2556,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 Sat Sep 26 11:48:09 2026 Received: from mail-pj1-f98.google.com (mail-pj1-f98.google.com [209.85.216.98]) (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 96DF64A2A51 for ; Tue, 1 Sep 2026 19:18:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.98 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290317; cv=none; b=NJdUhlL+B9wZtBDNGtmAc7zkpByCb4NhKvprMWDhBwHlDq1SiwltkStNohn9wU4Ku2/cm3ZCJBySDEFl9j7qxFTO60zrsdwVJzLG7XZb4N0YSpJRRMULZnPgXApiJ/tQuBzPiaUbshqFqh3/IFoSnVSmqDwDlDm6Ny89abzfCMI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290317; c=relaxed/simple; bh=vtAHAKj1PeAwfUJZCfBl4/eYH2oejA8SvnXfwzx3s3Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VM2NDWFJ0upNv6qeccUrkrB6zuIQ6W6/LjtV4tDcUgmrLVEuWx02JYC9px945MFcwHQWIq8rYfKwuolkd7hQXsU3xqzIIPxyueZRp5mvNT2t1CDXDpda57Z02JKYqF+0fkhNOsmsxc5F4JuY32DeczTqRXymRAZbOyYVuMrSsZ8= 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=IklVYuTt; arc=none smtp.client-ip=209.85.216.98 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="IklVYuTt" Received: by mail-pj1-f98.google.com with SMTP id 98e67ed59e1d1-398a4dcf289so238246a91.2 for ; Tue, 01 Sep 2026 12:18:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788290314; x=1788895114; 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=BOaI+y6MhHla4FLXrbxJ4X/BF94hpA5tmvdB9YE3jGk=; b=okxlW23rKmwp2CldKhQ+Rcg8HkHgyaVjIKzPXmYC4PDqlUWMvacK21pgx8S/1wmkrH 2qQ5QjXseJsz/YWzC56Bn8zJny/RsRrrc15eH9aLNMVfHi2uOkkpnIB1emiSNw5boi3O ZRB0kXkdejyq48vfWRdogzcSaE93vBXgm0GT66pKgLZ6Ts1+KdAcI/A7aU4fAQ2cdSQx uGZ1LnyrqgXbG/ELlz5Eay/5K+bTKGBSEboE7M4uhIPQ60x1Zf/RWwkIyApJWNX13A+g 7MyEP6ZcB6VA/I6UOCXZnkdp8nXpXs1Y4zA4WcXL/yJivlDTMEFAG7ax60crZmb/GbtA R8vw== X-Forwarded-Encrypted: i=1; AKwUvByrH7wkPuFRuueSlsMRxalpt5jfxsKvMHlbvXlqj1ag9kOO+NV5bq/gsbuMhRBBOKzgMeLx1sd/Ea3Cng4=@vger.kernel.org X-Gm-Message-State: AFuF++lsXZR6VRT8gcy/ehsG9loY+PYs9uuvfF0A+wn49q7/Pe8Cejhd terVcyv7ptWpgUrLTUGDQTtwftjQ6B6Sjs5olDMNTt47N7e51e/p43LmgDvtAhJrHTVZF6/ie20 q+Me4oyaQ+35CsVkPpcZfatZ8OEETCrBqwILqN+Kjt7MjO79pGt0pXpJUT3GlX12iBQKPIwhHbx X9MrUPB5bUp+f91GKweMNfXbkawqqX8nBFJ/mbBh5e3yWD9jIQTgiPRiBGsBkHrcFf1Msb9GNc/ 02VUb6pyp6cAAj5+/5rtpWa0A== X-Gm-Gg: AYBFou2D1Jsdm01eqC9AkulxlJfkkiIX4aWrsZxxGoeVnEFQSiohIcf61c/klehtXf7 h7Foc5HYspnpxJ+lJZWJEcg/gls+ZYygyeLcHfSvVScJxRUIBq29EDb48tK/TU6pymwgrJecTW2 p8NoPWoGTzHb3MpMpN1deFVaYSR+to0dPuBNBjHOUzRcDf/wvURFothkXqxB1o9nNwg6vHZcnbk DDKEX3bPU5xMK6gasvEe2ZJXdt0wnnTFv7w7v7Xw6eSRtxmf6hpjiBJp5Zdxr7h912XP45pKQyR yJlMmUo9J8OgXxVNE2n21ftxuozH4qZ8oeBZ4F89f5cYKN/JTbhISmhcxwEbI5fVxeiGvjCCi70 uKxIcJba5r1dDQMX8yXylk1I2H5nJloxHYcWWRKSLtUUxZNworjHY6+2Knj0EHiF4JYyCd1qjBS NN5hVe+NbS1klKGsxPssgFTirAcK2ik0Fb7w3hYweT1g== X-Received: by 2002:a17:90b:4b82:b0:38e:4cb:51f with SMTP id 98e67ed59e1d1-39907d1cad8mr15637591a91.11.1788290313716; Tue, 01 Sep 2026 12:18:33 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-20.dlp.protect.broadcom.com. [144.49.247.20]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-39ae05fb03fsm217318a91.0.2026.09.01.12.18.33 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 01 Sep 2026 12:18:33 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-38e8e864ef0so338281a91.0 for ; Tue, 01 Sep 2026 12:18:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1788290312; x=1788895112; 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=BOaI+y6MhHla4FLXrbxJ4X/BF94hpA5tmvdB9YE3jGk=; b=IklVYuTtTVGCU64ZPj8obgyQpdItEyYTNuLKFuCff6Xt7dbGmn5qRp0fGVMasNAqh1 WSH0KqrKoOuTM7QrDpxCp2htqS2x09YzBnbhsBL+rLEdy5XKR3TPKT1ReCeqnU4MKAGT cQJSWMGSWvSJAYLwdFIgNOFvSGJVjEeVShya4= X-Forwarded-Encrypted: i=1; AKwUvBzIEPrEYywCTwGv2a/CIvhqphUaAaw3hGASack3nbArFeTBCubz/j/w4A7TeYeNVckoXy0p62Jryrbe6HU=@vger.kernel.org X-Received: by 2002:a17:90b:52cc:b0:395:4de4:92be with SMTP id 98e67ed59e1d1-39907e0f90dmr15354899a91.13.1788290311971; Tue, 01 Sep 2026 12:18:31 -0700 (PDT) X-Received: by 2002:a17:90b:52cc:b0:395:4de4:92be with SMTP id 98e67ed59e1d1-39907e0f90dmr15354829a91.13.1788290311499; Tue, 01 Sep 2026 12:18:31 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-32f07b79cf9sm186440eec.18.2026.09.01.12.18.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:18:30 -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 5/7] bnge: Quiesce NQ0 around ring teardown in bnge_free_core() Date: Wed, 2 Sep 2026 00:47:26 +0530 Message-ID: <20260901191728.643212-6-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901191728.643212-1-bhargava.marreddy@broadcom.com> References: <20260901191728.643212-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_FLAG_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 | 70 ++++++++++++++----- .../net/ethernet/broadcom/bnge/bnge_netdev.h | 10 +++ 2 files changed, 61 insertions(+), 19 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net= /ethernet/broadcom/bnge/bnge_netdev.c index dc3d51f31e5e..10d54568f2c5 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,34 @@ 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; + + ring =3D &nqr->ring_struct; + bnge_db_nq(bn, &nqr->nq_db, nqr->nq_raw_cons); + synchronize_irq(bd->irq_tbl[ring->map_idx].vector); + napi_disable_locked(&bnapi->napi); +} + +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; + + 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) { @@ -1253,6 +1300,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); @@ -1268,6 +1316,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) @@ -1345,7 +1394,9 @@ 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); + bnge_resume_nq0(bn); if (rc) goto err_free_core; =20 @@ -1372,25 +1423,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..4d84f109ad5f 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h @@ -539,6 +539,14 @@ 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_FLAG_NQ0, +}; + +#define BNGE_NQ0_NAPI(bnapi) (test_bit(BNGE_NAPI_FLAG_NQ0, &(bnapi)->flags= )) + struct bnge_napi { struct napi_struct napi; struct bnge_net *bn; @@ -555,6 +563,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 Sat Sep 26 11:48:09 2026 Received: from mail-pl1-f228.google.com (mail-pl1-f228.google.com [209.85.214.228]) (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 EE2D94A204E for ; Tue, 1 Sep 2026 19:18:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.228 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290321; cv=none; b=U74nj0KvZK8oeSsDLz4EiSXfyhhJVtCiPCruQVBE8lIbjcVYf5IC1RmQM/6cDzK4pXdu59bjpl35tLsxmMrGl6biUmNpFJXz6iwvAv/+f2CBiS/0b4POCzLLEBZskgMTBZDtm/YzIYx2x+vsdurQllSNDXYw/0Xj+xEvi/az9r0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290321; c=relaxed/simple; bh=iueqeIbJYnCT9WVs/BpHtEDifuD6Tb8T9a83N/PgUVA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Cf9MFlPVKHaCTTKIWP+C4EC8Oz5eiSDapH0twHVvzLe9sU/VeqxE3tg5B4N3I9nhxkDwmxSApVzPhqqm5xeU10sXqhkCNo1KqCupYrjE7Xw4EfClxV2G5+Cb7uXDZc46MU+xPvh3S3yYFM0T/hkQlf2adUU44E6DGBI33MgIGFA= 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=JJsh8oed; arc=none smtp.client-ip=209.85.214.228 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="JJsh8oed" Received: by mail-pl1-f228.google.com with SMTP id d9443c01a7336-2cace91f112so1700475ad.0 for ; Tue, 01 Sep 2026 12:18:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788290319; x=1788895119; 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=W1gNnpuofqG8j7WBbKQviqP7swsJK+cjy5dt+o+RP90=; b=sW2/ymo8rCv9gYSaFsoLnc/VCwlj9yjsZE66ahTYT4sMGWX2nS+2FfR6bNQlmP9P0d Sdxocz+vxy7sxIk/Tg7G/7OvIKiXtRMahakathhCDvZUhwo6yID7UR6K8404JRwnHD/W r9FC9bapSOp64B8G/RV6PJmYOiKsLFt5GCsS+qtmOnxKQHhFgU/DSVEiCzXFrDyKEm0L KY4XF6J++mt5Zf82efA//RxT8tsxMj889je4AKBi7IDHpYUvG5IvVrshWnEnGy+qs+XE YksruLkM9Ni+RgmQbpE67zNlDboU06S0oxv4aQgyq6rB3PbOyGHKM+oOnE8CouAN1dNJ Xofg== X-Forwarded-Encrypted: i=1; AKwUvByhib51Pn5naCf5+OEabAoUOZvDiG5Jf29ImS1H010yAUQVrh8d/HyO6tQcB1BRo/MYGV9N2e+Pt51n7Ws=@vger.kernel.org X-Gm-Message-State: AFuF++kH3Lci682aDFFGCpRDde919fBtsj612Zk1CSbRfjI8pZQ+boQz qEXp0IezENB491y+Jhyt1uLVJywVx8VaI7hmxTlolNqhrLMFu5rJNc87KWbFWWaCeZjVAB8hIkC XfuNIPUrK9EQyqaJiJtYtl+bDnVXA8lDfH3ueaEdVwLcLVFesivuxjrOGrwnU/L8jreBPg4bXJd Z/gAJ0u7qKNJ5EvbusCifa/WDzEDCB/3IodIWLI3Ylo+HUgsJR2LZ9mM2H8JmMQ6TRUItpyvelE dQ7fRPIP2YHHsuppokel/88yw== X-Gm-Gg: AYBFou2P7lbzXLZFrNs5RUWs77zhhT81VtrQSOIwpk7pK5IhpcqYS0qCxyNE0VIBSFx VSJvp6uNAZNg51ZDzkLleLU2RJLR0UF7IqUFDBqXldQBlWYTtgSq+kXx4R2hpBrH7D8DOCq0oYm I/nFIOdfjI5vtwEGvZOhujNFEIyr++ZH1o+6RauL95S0dpu1oAzknjxHs6AQEzHfGSdwSj4Q+v3 aE5CTSXedAyRCqy9L+OKTJC0mD85xRFxmBjR1+Vlqr9m/GwkH3zMbzeRLiUx3dq/PySTKCAjhDI ysqAtfOKvoM895XxyxIAuvc9hafR2A0VAGQkcdhnRht9BhD2PQSHtyPg1K0bWh4qK39+OPiqZq3 1OA9W8JWz3JmwF78/iFmk8onxMNR3y1+lGqC/Hwz1cDVXY0MVpACtdNMzM+pLAjUQ1Us2uNfMQM 6mtjZHemHmDwB3p0BWSnpttA7jU3HKKr3qSzwFSIvNXA== X-Received: by 2002:a17:90b:2801:b0:38f:18f9:785 with SMTP id 98e67ed59e1d1-39ae829c9demr490878a91.8.1788290319178; Tue, 01 Sep 2026 12:18:39 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-23.dlp.protect.broadcom.com. [144.49.247.23]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-3990d4bb9c4sm1317050a91.7.2026.09.01.12.18.38 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 01 Sep 2026 12:18:39 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2d6fb956002so2294335ad.1 for ; Tue, 01 Sep 2026 12:18:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1788290317; x=1788895117; 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=W1gNnpuofqG8j7WBbKQviqP7swsJK+cjy5dt+o+RP90=; b=JJsh8oed9OsHtqN2khwlQMUC3jQsVvACM0uIGGwjUPnrI2sGSiAn/eVrAOZpKD8kci /FB1dMVWyS2lQsrLHz1J2r41s187GcMBXbn4sIMkti3GYJ1SqKWBJXlN6Jm95XE7q1x8 sAshdb2L5gp/XK2ODetzbdSk7SaeDfB5xw9/U= X-Forwarded-Encrypted: i=1; AKwUvBzCnqMl+DqX90bqLdAi68Tevzohd1UkoRnZzviF7CO+1aqEiN2gw6aOAziS/pgtQMcBE+wuvMR0Du6L8bM=@vger.kernel.org X-Received: by 2002:a17:903:234b:b0:2d8:d4d3:3fc0 with SMTP id d9443c01a7336-2dae5f03d3emr5623195ad.20.1788290317362; Tue, 01 Sep 2026 12:18:37 -0700 (PDT) X-Received: by 2002:a17:903:234b:b0:2d8:d4d3:3fc0 with SMTP id d9443c01a7336-2dae5f03d3emr5622285ad.20.1788290316606; Tue, 01 Sep 2026 12:18:36 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-32f07b79cf9sm186440eec.18.2026.09.01.12.18.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:18:35 -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 6/7] bnge: Create NQ0 during probe and keep active across open/close Date: Wed, 2 Sep 2026 00:47:27 +0530 Message-ID: <20260901191728.643212-7-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901191728.643212-1-bhargava.marreddy@broadcom.com> References: <20260901191728.643212-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 via bnge_setup_nq0() during probe and free it via bnge_free_nq0() at remove. Skip NQ0 in open/close ring, IRQ, and NAPI helpers once BNGE_NAPI_FLAG_NQ0 is set. Also guard bnge_napi_poll() against stale completions for rings freed by bnge_free_nq_tree(). The previous patch already added the bnge_quiesce_nq0()/bnge_resume_nq0() guard around bnge_free_core()'s teardown and bnge_alloc_core()'s rebuild, so NQ0 is safe to leave active across close/open from the moment BNGE_NAPI_FLAG_NQ0 is set below. Signed-off-by: Bhargava Marreddy Reviewed-by: Dharmender Garg Reviewed-by: Vikas Gupta --- .../net/ethernet/broadcom/bnge/bnge_netdev.c | 237 +++++++++++++++++- .../net/ethernet/broadcom/bnge/bnge_netdev.h | 1 + .../net/ethernet/broadcom/bnge/bnge_rmem.c | 3 +- .../net/ethernet/broadcom/bnge/bnge_txrx.c | 15 ++ 4 files changed, 244 insertions(+), 12 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net= /ethernet/broadcom/bnge/bnge_netdev.c index 10d54568f2c5..d11c404acd4e 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c @@ -527,6 +527,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 +542,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 +570,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; @@ -592,6 +599,9 @@ static void bnge_quiesce_nq0(struct bnge_net *bn) if (!BNGE_NQ0_NAPI(bnapi)) return; =20 + if (test_and_set_bit(BNGE_NAPI_FLAG_NQ0_QUIESCED, &bnapi->flags)) + return; + ring =3D &nqr->ring_struct; bnge_db_nq(bn, &nqr->nq_db, nqr->nq_raw_cons); synchronize_irq(bd->irq_tbl[ring->map_idx].vector); @@ -606,6 +616,9 @@ static void bnge_resume_nq0(struct bnge_net *bn) if (!BNGE_NQ0_NAPI(bnapi)) return; =20 + if (!test_and_clear_bit(BNGE_NAPI_FLAG_NQ0_QUIESCED, &bnapi->flags)) + return; + napi_enable_locked(&bnapi->napi); bnge_db_nq_arm(bn, &nqr->nq_db, nqr->nq_raw_cons); } @@ -658,11 +671,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++; @@ -1236,10 +1251,14 @@ 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; - bn->grp_info[i].nq_fw_ring_id =3D INVALID_HW_RING_ID; =20 if (irq_re_init) bn->grp_info[i].fw_stats_ctx =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 return 0; @@ -1442,8 +1461,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 @@ -1970,6 +1992,9 @@ static int bnge_hwrm_nq_ring_alloc(struct bnge_net *b= n, int index) unsigned int vector; int rc; =20 + if (BNGE_NQ0_NAPI(bnapi)) + return 0; + vector =3D bd->irq_tbl[map_idx].vector; disable_irq_nosync(vector); rc =3D hwrm_ring_alloc_send_msg(bn, ring, type, map_idx); @@ -2402,6 +2427,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 @@ -2417,9 +2445,10 @@ 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); + if (BNGE_NQ0_NAPI(bn->bnapi[i])) + continue; =20 - synchronize_irq(bd->irq_tbl[map_idx].vector); + synchronize_irq(bd->irq_tbl[bnge_cp_num_to_irq_num(bn, i)].vector); } } =20 @@ -2432,6 +2461,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); } @@ -2448,6 +2480,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); } } @@ -2464,6 +2498,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); } } @@ -2612,6 +2648,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, @@ -2673,6 +2712,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) { @@ -2701,6 +2743,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) @@ -2840,6 +2885,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); } @@ -2858,6 +2907,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 @@ -3237,6 +3289,8 @@ static void bnge_close_core(struct bnge_net *bn) clear_bit(BNGE_STATE_STATS_ENABLE, &bn->state); spin_unlock_bh(&bn->stats_lock); =20 + bnge_quiesce_nq0(bn); + bnge_free_all_rings_bufs(bn); bnge_free_irq(bn); bnge_del_napi(bn); @@ -3467,6 +3521,159 @@ static void bnge_init_ring_params(struct bnge_net *= bn) bn->netdev->cfg->hds_thresh =3D max(BNGE_DEFAULT_RX_COPYBREAK, rx_size); } =20 +static void bnge_free_nq0(struct bnge_net *bn) +{ + 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; + + bnapi =3D bn->bnapi[BNGE_NQ0_NAPI_IDX]; + nqr =3D &bnapi->nq_ring; + ring =3D &nqr->ring_struct; + irq =3D &bd->irq_tbl[ring->map_idx]; + + if (!BNGE_NQ0_NAPI(bnapi)) { + /* A previous bnge_setup_nq0() could have failed + * leaving behind an active irq. + */ + goto free_irq; + } + + clear_bit(BNGE_NAPI_FLAG_NQ0, &bnapi->flags); + clear_bit(BNGE_NAPI_FLAG_NQ0_QUIESCED, &bnapi->flags); + + /* Unlike the other NQs, NQ0's NAPI is left enabled by bnge_disable_napi() + * so it can keep processing async events while the interface is + * administratively down. It is explicitly disabled below, or was never + * enabled if netdev was never opened (netif_napi_add default). + */ + bnge_db_nq(bn, &nqr->nq_db, nqr->nq_raw_cons); + synchronize_irq(irq->vector); + + 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; + bn->grp_info[0].nq_fw_ring_id =3D INVALID_HW_RING_ID; + +free_irq: + if (irq->requested) { + 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; + + netdev_lock(bn->netdev); + napi_disable_locked(&bnapi->napi); + __netif_napi_del_locked(&bnapi->napi); + netdev_unlock(bn->netdev); + + /* We called __netif_napi_del_locked(), we need + * grace period before freeing napi structures. + */ + synchronize_net(); + } + + bnge_free_ring(bd, &ring->ring_mem); + bnge_free_nq_desc_arr(nqr); +} + +static int bnge_setup_nq0(struct bnge_net *bn) +{ + 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; + + 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; + + netdev_lock(bn->netdev); + netif_napi_add_config_locked(bn->netdev, &bnapi->napi, + bnge_napi_poll, bnapi->index); + netdev_unlock(bn->netdev); + + 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; + + netdev_lock(bn->netdev); + netif_napi_set_irq_locked(&bnapi->napi, irq->vector); + netdev_unlock(bn->netdev); + irq->requested =3D 1; + + if (zalloc_cpumask_var(&irq->cpu_mask, GFP_KERNEL)) { + int numa_node =3D dev_to_node(&bd->pdev->dev); + + irq->have_cpumask =3D 1; + cpumask_set_cpu(cpumask_local_spread(BNGE_NQ0_NAPI_IDX, numa_node), + irq->cpu_mask); + rc =3D irq_set_affinity_hint(irq->vector, irq->cpu_mask); + if (rc) { + netdev_warn(bn->netdev, + "Set affinity failed, IRQ =3D %d\n", + irq->vector); + goto err_free_irq; + } + } + + rc =3D bnge_hwrm_nq_ring_alloc(bn, BNGE_NQ0_NAPI_IDX); + if (rc) + goto err_free_irq; + + netdev_lock(bn->netdev); + napi_enable_locked(&bnapi->napi); + netdev_unlock(bn->netdev); + bnge_db_nq_arm(bn, &nqr->nq_db, nqr->nq_raw_cons); + + set_bit(BNGE_NAPI_FLAG_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: + netdev_lock(bn->netdev); + __netif_napi_del_locked(&bnapi->napi); + netdev_unlock(bn->netdev); + bnge_free_ring(bd, &ring->ring_mem); +err_free_nq_desc_arr: + bnge_free_nq_desc_arr(nqr); + return rc; +} + int bnge_netdev_alloc(struct bnge_dev *bd, int max_irqs) { struct net_device *netdev; @@ -3594,14 +3801,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); + 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); err_free_ring_grps: bnge_free_ring_grps(bn); err_free_bnapi_mem: @@ -3624,6 +3837,8 @@ void bnge_netdev_free(struct bnge_dev *bd) =20 unregister_netdev(netdev); =20 + bnge_free_nq0(bn); + 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_netdev.h b/drivers/net= /ethernet/broadcom/bnge/bnge_netdev.h index 4d84f109ad5f..e2fb15fd62b6 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.h @@ -543,6 +543,7 @@ struct bnge_tx_ring_info { =20 enum bnge_napi_flag { BNGE_NAPI_FLAG_NQ0, + BNGE_NAPI_FLAG_NQ0_QUIESCED, }; =20 #define BNGE_NQ0_NAPI(bnapi) (test_bit(BNGE_NAPI_FLAG_NQ0, &(bnapi)->flags= )) 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 From nobody Sat Sep 26 11:48:09 2026 Received: from mail-pj1-f100.google.com (mail-pj1-f100.google.com [209.85.216.100]) (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 8907F49E5D3 for ; Tue, 1 Sep 2026 19:18:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.100 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290326; cv=none; b=C4slw6zy8bmNU7IPc2w2B1F3VX4D3cdmyrDCzU5j96ZR8RdG5lhB2PNpIRh8xTVX029ikB/E4HyhROWZD8roocWSnSMqV3FPSpP5rVrxNzPnQWwIpqQQ+cckGdY86fF6V/uEu6yC2k5xhonn3D+164EmSZUr0uw00EVNNVFZzPU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788290326; c=relaxed/simple; bh=ct3wjDm9DioxEoU5z5Oc8L7zod1x2daMyErzOnMcehk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k5kn6oPO4/FgJEPgtj4jpJlR75DV/e8AuKKEUQwBBShjqjesR67+sSlcKb3nek+r1wRJnftoZl2rEkpQd8VtZeLOIchU8XOUujqKzwZU1jICWvjkU3E9RNH5951gCDn8p6qlgyjVVCUV6XiCex6M7PyXIXuQ70BG693UWUGsWdg= 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=DRqJ4cJq; arc=none smtp.client-ip=209.85.216.100 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="DRqJ4cJq" Received: by mail-pj1-f100.google.com with SMTP id 98e67ed59e1d1-398a5aad413so186648a91.3 for ; Tue, 01 Sep 2026 12:18:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788290325; x=1788895125; 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=8eXtyQc0pvhajUfFg9n3BqpX27RWj/RmfivJgYatSZg=; b=h43W/iDJPAoLE/gCa9XFUo2KST9DBTgSmp4kacNwXJ8uy48tLdPDXZOxql9mAEca03 +JpCyqT2XBW3YtTinD7HBhVDY0uv7vJxrL96+eDxfaNha2ty8XQ13zKOUfzxT4j5WhjI VoVbLLjTL8l4RJxeA2Bi6WUnGNisUC4TcNyzeM9S9hs4zJ68nbgU2pyH6DEtwdXWEfSG pCk5cMEZ0GasRO8w/XLayOT11gTTpHOMHPadzoSbD7Py/VkjMVtMwA2OX+8SYGL9+vw6 24TVVvVZbZLUdCF5yNRGaxJ2ohAlZBU9mY+mSzwaD/KbFNtBa41mYBIj//8H4WFjniXv JfGg== X-Forwarded-Encrypted: i=1; AKwUvBxi1I/MrdXAH76ZaQSKJ8J6TBEHkKeYSOOh1pt5ZBNV6XEaeBrtoHqfsrY2eMYOKxBuELZRjINs/amsIsM=@vger.kernel.org X-Gm-Message-State: AFuF++l1BU/7/XKMvB3vGayZ9+csRvwkJF0FocwJ6/oj+ac1QbhetJ7m /YNrqcuJDkLZSZGLRnObNpYdmBQPqdcsV8gf35bcs21SMejP+ENuUzjYptPoLzJ7zyH6daorcYf OZoOLX60eEcPLW39Z4QiAOE/PjAHQzJs3Bgpz6el23slvsk6gRqTifBFBnMfsEa35caR3jFEmUZ 4eUlxgxb8CIkn42BYR6c1eRHxKHc70lpeYstDYCkanIIkhSZGtVK5XGTbJzQEiT9IqASt8yLwaB 0hR+fpcGP8AZsRp27MhqcfKAA== X-Gm-Gg: AYBFou1tRgL5Opus4F74AnLpwTG8rum8ZRF9atkYcql60v+HaMiC2QtxMG9mJz7Qktt xnpagYKhFL4Gj56A3oo64+J54gbSnGZYgXdRkc+WfySBuJaYPjXpSeSqduvdvcs7yslPWYEv90g 2eAtaEc8eqLtHLHpF/zVDBwrAR8YstzgttK1f2Ne4GTCzgw1TjjIb2ScyuC1rF7vRaWGhJTCBz/ SFemqi0UQPATV3gUYJccTWszB6xDB/zxbWEgftbiWvw4JegI9ckXQmKN+slXk+Wxr2IDVyCBnj+ DUSLmD4JddrJ+lzmOHKgAhZ6rQwzAKiDt7F75OeChSjY8lQFw7luu65ztLko0B5WzDDtkrxddQh PdLmK5BAU/CLbCkGBW5NqeJQ2nx1Q8r8nU/nx0C8FqDI8J5PrPpW/0AoUPxiSdNliL6kbsgcrhT 6NuumWUeZlUO0lvPjZipLx9CbrWF2/BnNb9iABhWP4BA== X-Received: by 2002:a17:90b:1f87:b0:395:5f43:4ec4 with SMTP id 98e67ed59e1d1-396d0a6589dmr56764501a91.0.1788290324787; Tue, 01 Sep 2026 12:18:44 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-23.dlp.protect.broadcom.com. [144.49.247.23]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-3990d49cc83sm1271264a91.6.2026.09.01.12.18.44 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 01 Sep 2026 12:18:44 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cfca8558d2so1658355ad.2 for ; Tue, 01 Sep 2026 12:18:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1788290323; x=1788895123; 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=8eXtyQc0pvhajUfFg9n3BqpX27RWj/RmfivJgYatSZg=; b=DRqJ4cJqjknGFxeE6TL7igw/LDuPQfLUyHzNNAV9jPM6AZMBw797Q3oAXw8j4b8MU3 ZUjb+BvzOd/TAAwfIK3zRTbR/A4VDo4MwfkkY7G9UEs0AMycHino4hHklYHkX23NhWU2 R1+HL+q2tuBZnbK0zl1TZlvdsWz7Ft03PC+fI= X-Forwarded-Encrypted: i=1; AKwUvByLfUbHPRiGM47TriTW6suLgXobWMUMl4vdC2p8/IOtlFOw+gLKxYasHc6ntofsz1YqCnx5wcFBjYOza/o=@vger.kernel.org X-Received: by 2002:a17:902:f68c:b0:2d8:d4cd:dc8f with SMTP id d9443c01a7336-2d8d4cddf3dmr351189065ad.18.1788290322856; Tue, 01 Sep 2026 12:18:42 -0700 (PDT) X-Received: by 2002:a17:902:f68c:b0:2d8:d4cd:dc8f with SMTP id d9443c01a7336-2d8d4cddf3dmr351188305ad.18.1788290322387; Tue, 01 Sep 2026 12:18:42 -0700 (PDT) Received: from localhost.localdomain ([192.19.203.250]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-32f07b79cf9sm186440eec.18.2026.09.01.12.18.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 12:18:41 -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 7/7] bnge: Process async events while administratively down Date: Wed, 2 Sep 2026 00:47:28 +0530 Message-ID: <20260901191728.643212-8-bhargava.marreddy@broadcom.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901191728.643212-1-bhargava.marreddy@broadcom.com> References: <20260901191728.643212-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" Restructure bnge_sp_task() to skip only periodic stats via goto when the interface is down, allowing it to fall through to async event handling. Previously, clearing BNGE_STATE_OPEN caused an early return that dropped all async events while down. Additionally, add a netif_running() early return to bnge_report_link() to a= void updating carrier state or printing link messages while closed, while still updating bd->link_info safely in the background. Signed-off-by: Bhargava Marreddy Reviewed-by: Rajashekar Hudumula Reviewed-by: Dharmender Garg --- drivers/net/ethernet/broadcom/bnge/bnge_link.c | 3 +++ drivers/net/ethernet/broadcom/bnge/bnge_netdev.c | 7 +++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_link.c b/drivers/net/e= thernet/broadcom/bnge/bnge_link.c index 3b0dfcf27376..31e2ede2e537 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_link.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_link.c @@ -402,6 +402,9 @@ static char *bnge_report_fec(struct bnge_link_info *lin= k_info) =20 void bnge_report_link(struct bnge_dev *bd) { + if (!netif_running(bd->netdev)) + return; + if (BNGE_LINK_IS_UP(bd)) { const char *signal =3D ""; const char *flow_ctrl; diff --git a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c b/drivers/net= /ethernet/broadcom/bnge/bnge_netdev.c index d11c404acd4e..49e27cbc6394 100644 --- a/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c +++ b/drivers/net/ethernet/broadcom/bnge/bnge_netdev.c @@ -394,10 +394,8 @@ static void bnge_sp_task(struct work_struct *work) struct bnge_dev *bd =3D bn->bd; =20 netdev_lock(bn->netdev); - if (!test_bit(BNGE_STATE_OPEN, &bd->state)) { - netdev_unlock(bn->netdev); - return; - } + if (!test_bit(BNGE_STATE_OPEN, &bd->state)) + goto async_evt; =20 if (test_and_clear_bit(BNGE_PERIODIC_STATS_SP_EVENT, &bn->sp_event)) { bnge_hwrm_port_qstats(bd, 0); @@ -405,6 +403,7 @@ static void bnge_sp_task(struct work_struct *work) bnge_accumulate_all_stats(bd); } =20 +async_evt: if (test_and_clear_bit(BNGE_UPDATE_PHY_SP_EVENT, &bn->sp_event)) { int rc; =20 --=20 2.47.3