From nobody Mon Dec 1 22:37:08 2025 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 55B69301464 for ; Sun, 30 Nov 2025 23:35:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545745; cv=none; b=cZ3Gatz5m2rB65cJNdrD0sY1cV/HcoXskbvy2tF2Bmex1gpOWtpyCkAHACwzStUF+c+RYYOH9J/BWOzTOXH+ULzU6hGecXCGgpPzfyQ0X4hBg/uxc3woOJeuJXdl4dXKrGZvgcDa46dyJN9kZaK4vI0uXJsFlbr9XwI305nWtLY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545745; c=relaxed/simple; bh=o4iyw2832atNMAZQImPFBGA5yCK+ZgPjuVFT1OuNVO4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oefGenBKtabUugelVkBO4VEO7gLuaI7Ly2aeErBjuukauBdEN4ORge2GjMrYZZkOx/OwkSy8I7hU3GoFkuV5a6NbWktqb2Jv5vO6smBKqBPMxi+Cy/KwGMsRtJAvFano7DhHMf7y58NysnGT/dUgQ7lV2p5mZPnNcCk7ZZjqEWI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VaXsnjVu; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VaXsnjVu" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4775ae77516so36805305e9.1 for ; Sun, 30 Nov 2025 15:35:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764545742; x=1765150542; 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; bh=WQMylrLW4Im9C3RrLyVskL4uzKLnQ4lYGDfbJ+ntA2k=; b=VaXsnjVufNs3gclDiScMqSFHNBjJVUDmV81FXsfFlmxopyAqW5eDl8ll1a/2R3De9B Rp4YRozymaxW3NV70+Gvvr2t6WdvDZlA8THrJ3tUp7Bc7JoK1xSGdUgUxbSZkxbtOBi2 yIUdh5zzbIYcvfLhKgc6B+ltCaNIOsxUsyZhDibKKENqENs5EEOHjAfj0APfKj8Rw2HL zYbzTZg7CWmWsOKMBVkohX1FOVMhM2qeVDEz3GU2DYNkqjO9NdySbyDvpsb9yp0YnAKe eE9sDC0B02Q4cUSHHZnIoM+3YPVuupTYV30DeabL4z4b30epxpDoDfKKl5eYgID8dzdy yQKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764545742; x=1765150542; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=WQMylrLW4Im9C3RrLyVskL4uzKLnQ4lYGDfbJ+ntA2k=; b=Da8yGX0dJKwV7F8Fh8lVayUvcTPkLXJITg0gGV9jQUmkjSQDcoSUecK/pH/2RVW5hf Z8bWKgTHvgnGAFZ1GSm7fEMqj3M7n1OusnjJwJ5UyNP/341DN4EN5E3awt9PFRxwQ60v vq931StPal9kf5k6AQ8J3PDtth4ny7Rh/gXRlezgRg3r1UGsivGhqtq/j4icFJlN52Sk tP/jjLjgISD2RFzhrlVcyAceBvlSsWM29wlIgYHrT+yxj30x9WmsU6kkfot/MB4kHR5j QwbUFZwJneKBNoOzXL2zwtlFwmP31OeH2x/7Btc6Zq/CMlsCK8mb6SyWnu6pWkND9h15 yq8A== X-Forwarded-Encrypted: i=1; AJvYcCVO9Qq1SgwZGAD99sds0fRnvfpveuXIWuFDoEr9j7Vu2ewVXhlykHozOBtMEa1/hqq+1dYmN7EVv9aWmYg=@vger.kernel.org X-Gm-Message-State: AOJu0Yz+2EshH9KEhPMSHYnjoRcmBTbkTcW44j5HT8yeDOJ9DZ9HzFVK n5sJD7QU+Psk2m5ZS6tFrgOUPWwaLPPs1+PxS0t7pR3Im29f5hJrHrUx X-Gm-Gg: ASbGnctZ/VvDnxAtXzoIUjmUlhVVrv0STBN4RcqTJRV3nBlYIl4kc1H64Tcj0F9wKlf kjKC64Dsblv3PGLPkgL/5n7pm8HuCUjhwI1A/t234slJo4AHaWAp3p71F4AuatEKhFrIy9dnIOA e7eEH1XJN8tg01cWX3m1mVNFxhdn8nJi1zkUyepo90WhOPI0hQ+hib+ly3p53Leiw+QcIsMrOqQ KNgrFQ3kh34oMU0L7spbpJJge6NDlm+DdwFkGw3QedjcGpzcCaI7Gs1Pdx09WQFqKCYWsMwbBje y2ydzovuQVJAU+BkUAv3aS09s6Xvx+4R5ng4lfIHOBq0vjE89RarUlCILeCdkGMtAIxKWSopNYo rlg5EZqnVtchfVTAL/5kAwwxtkOfyp2DAtpQR3oVhZH44zVrth3K8OSdZaFsN1FqSPrbtl/Xr3r jg2SNk2O9FVKhL1IsZI5VuV4sEexny13Cb7qqvfOFjgiek+HIyyXNhkRlkXW+kWWml3tx5VqY7O YlgTHsEcr/ptTUY X-Google-Smtp-Source: AGHT+IFRNy69yAJEtLTkHqjePuEbcPuedCzCBZDYARz00zxMJbUrkfp5Acqq1qnoxF/x8wIlVCZ83w== X-Received: by 2002:a05:600c:1c29:b0:477:639d:bca2 with SMTP id 5b1f17b1804b1-477c10c85e2mr406364115e9.4.1764545741617; Sun, 30 Nov 2025 15:35:41 -0800 (PST) Received: from 127.mynet ([2a01:4b00:bd21:4f00:7cc6:d3ca:494:116c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-479040b3092sm142722075e9.1.2025.11.30.15.35.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Nov 2025 15:35:39 -0800 (PST) From: Pavel Begunkov To: netdev@vger.kernel.org Cc: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jonathan Corbet , Michael Chan , Pavan Chebbi , Andrew Lunn , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Ilias Apalodimas , Shuah Khan , Mina Almasry , Stanislav Fomichev , Pavel Begunkov , Yue Haibing , David Wei , Haiyue Wang , Jens Axboe , Joe Damato , Simon Horman , Vishwanath Seshagiri , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, io-uring@vger.kernel.org, dtatulea@nvidia.com Subject: [PATCH net-next v7 6/9] eth: bnxt: adjust the fill level of agg queues with larger buffers Date: Sun, 30 Nov 2025 23:35:21 +0000 Message-ID: X-Mailer: git-send-email 2.52.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jakub Kicinski The driver tries to provision more agg buffers than header buffers since multiple agg segments can reuse the same header. The calculation / heuristic tries to provide enough pages for 65k of data for each header (or 4 frags per header if the result is too big). This calculation is currently global to the adapter. If we increase the buffer sizes 8x we don't want 8x the amount of memory sitting on the rings. Luckily we don't have to fill the rings completely, adjust the fill level dynamically in case particular queue has buffers larger than the global size. Signed-off-by: Jakub Kicinski [pavel: rebase on top of agg_size_fac, assert agg_size_fac] Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 28 +++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index f4c2ec243e9a..e9840165c7d0 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -3816,16 +3816,34 @@ static void bnxt_free_rx_rings(struct bnxt *bp) } } =20 +static int bnxt_rx_agg_ring_fill_level(struct bnxt *bp, + struct bnxt_rx_ring_info *rxr) +{ + /* User may have chosen larger than default rx_page_size, + * we keep the ring sizes uniform and also want uniform amount + * of bytes consumed per ring, so cap how much of the rings we fill. + */ + int fill_level =3D bp->rx_agg_ring_size; + + if (rxr->rx_page_size > BNXT_RX_PAGE_SIZE) + fill_level /=3D rxr->rx_page_size / BNXT_RX_PAGE_SIZE; + + return fill_level; +} + static int bnxt_alloc_rx_page_pool(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, int numa_node) { - const unsigned int agg_size_fac =3D PAGE_SIZE / BNXT_RX_PAGE_SIZE; + unsigned int agg_size_fac =3D rxr->rx_page_size / BNXT_RX_PAGE_SIZE; const unsigned int rx_size_fac =3D PAGE_SIZE / SZ_4K; struct page_pool_params pp =3D { 0 }; struct page_pool *pool; =20 - pp.pool_size =3D bp->rx_agg_ring_size / agg_size_fac; + if (WARN_ON_ONCE(agg_size_fac =3D=3D 0)) + agg_size_fac =3D 1; + + pp.pool_size =3D bnxt_rx_agg_ring_fill_level(bp, rxr) / agg_size_fac; if (BNXT_RX_PAGE_MODE(bp)) pp.pool_size +=3D bp->rx_ring_size / rx_size_fac; =20 @@ -4403,11 +4421,13 @@ static void bnxt_alloc_one_rx_ring_netmem(struct bn= xt *bp, struct bnxt_rx_ring_info *rxr, int ring_nr) { + int fill_level, i; u32 prod; - int i; + + fill_level =3D bnxt_rx_agg_ring_fill_level(bp, rxr); =20 prod =3D rxr->rx_agg_prod; - for (i =3D 0; i < bp->rx_agg_ring_size; i++) { + for (i =3D 0; i < fill_level; i++) { if (bnxt_alloc_rx_netmem(bp, rxr, prod, GFP_KERNEL)) { netdev_warn(bp->dev, "init'ed rx ring %d with %d/%d pages only\n", ring_nr, i, bp->rx_agg_ring_size); --=20 2.52.0