From nobody Fri Dec 19 21:48:04 2025 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (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 664BA314A97 for ; Tue, 14 Oct 2025 13:00:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760446841; cv=none; b=uX5rAGmApTSgx7a/vfP2G2VyEN3fXRS1ilmQzOvVEBmEmdQFPqqMXMFjVLT2Wc/C5RPEdEkMgneyYDV6PH0pifPS3PKrIUYS0o6WTfrJub3RpM+8LF/+0yokcLJncyq0topJSL/l+nNRV8UiWEcUPIYnu6qVUenv8EmLLcZsxW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760446841; c=relaxed/simple; bh=JM6u3rhenlQZWL+x7CQ4y9MfGHKPZFCJcJabv3mo818=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Jmm/m5SM5/C3dKUqwxjXz3IbjOOUGcN9Z+IFr0xWMzuU6Vw+Xi0dRBFe39p5Qc7RVvfdGNsREk7YAR+MzbCxK6VLsqesqLD5+wFdBtIJPIZfmYasI0PWdth+GwN5KBoi+iPNPURMc4HCjvpq5kAO/gcr+iAkDfaKs9qItbOrmpc= 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=jso8Odz1; arc=none smtp.client-ip=209.85.221.44 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="jso8Odz1" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-3ee130237a8so4218226f8f.0 for ; Tue, 14 Oct 2025 06:00:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760446838; x=1761051638; 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=bo/Hffm+GCU38S4s9L6o3lMbhm24x5k4XXoTTrdb28c=; b=jso8Odz1yFP3cru5SQvAzTlVeY1SzIsJPQ8CL7JoJKQRHFnLimrxUNtmu6VNhitd8o GCuDy+YaHfp9v2I2vlBdhwNRQZcVoqJF2q7BLe90chXwaDPLFkpRIBVEYK+9qhMM5BQL RoMpA8nd8FkFrSi9bbIZfTrbSX4Q3Vak0SeS5KMx8aZoNbVikx7eOhHQ9w2WR/biZpnK 9FkMIzaBwo/Jk8vNg54u0T7Au071mqsgeV2aNMNWMu0XJf8f2Tw7Zrx4mXoqnxYnaYfv eiwCkOTURKBRyKn0cbDWDW31dORZLKQnGyigivywUGF/spGxo1Q9ke0c/CX40SHjKwjW mFPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760446838; x=1761051638; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bo/Hffm+GCU38S4s9L6o3lMbhm24x5k4XXoTTrdb28c=; b=CftKEU3FHUlDW/BZqABmVQ+M8b11eZxyGDkQZWnesuEPRE4F0gb6hpMNNsX08o5VhD CmNO9+i9+fKJjaWh7DjIHWCkJNI3Guu3zvYTBkSn263WPCt+eOKIkV0s/yV1ZeKFuVts jjbgymIGnE2IlIBRKQzoJUau3Nv1tfQ3CQwi9ifE13iLD+gubg43In9Bz+dsmplwrNHl MrB9oioIZGwkYKvYO1fWt4cY86BooGzOqwvFOzHfIGu0Nhfy0JZKLnyCeVjUofNU6raA H+6glaDUcEItiZ/oJq83viofxoR40Z0VWo+BxmUBUuL+FZ8r/NAHnJBsQ9ac7ZF5QHfk Qczw== X-Forwarded-Encrypted: i=1; AJvYcCWLVR9BOfNHsrcVQo057VpWs2781atdNi9XwPXygGuq8W5iHpiUebXUCs88IFmPhzpN7ZhIv59Oaqtwca4=@vger.kernel.org X-Gm-Message-State: AOJu0YzzuHbOVGNoTKEelhDmRq96wRmTEePlrKXQfiI88aJvvyqPYLiB mwQ3ejMeq31ATof5OhoaddGEPNI8hifXkx4TbIXNuuh91QEf74BPlo5E X-Gm-Gg: ASbGnctkzqY2wjWzvmm+TTD88pPQA1AAAG2gRQR2WmEa02bl6SLG1WHFyHtivpe6wo+ PasTmTZBYCc5yRhnL0RHnDGIko88GiGlDr7IOUD/0KccOjOJhR9mVX4EqgEz9gYaut41Gy5Vcja KTGDgktu3Q79VFE1S4iiB8yNKdMaOP7Xpurh5FlwFKb71Wi1uRq3HP4AHe/WR1Yj/h4NiRS+/vN Nj57S2Em4qg99M4q2h+Dm4ymML8axUjArvqR06kJ4vuFwWZbVH0m+Zw0GXDKd4U/6VAMwNKFGq2 F1zKFzNaj6uJwaAEPy/Cue/jCnUFDmMKiZ1yrw5TuG8dkUdplra1NbbEU3ASqwGlDEl/+p94nsc GH9QzWu0ApDmNRX4WCbJ+8cpf X-Google-Smtp-Source: AGHT+IGhSZFm38F8sVCM0Ux5ROYmcmMusBWqctwDSzojJka/K/RPf3AoV/TQmhhmAwvujH6biaI4iA== X-Received: by 2002:a05:6000:601:b0:3d7:2284:b20 with SMTP id ffacd0b85a97d-42666ab296fmr16323066f8f.3.1760446837436; Tue, 14 Oct 2025 06:00:37 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:7ec0]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce582b39sm23296494f8f.15.2025.10.14.06.00.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Oct 2025 06:00:36 -0700 (PDT) From: Pavel Begunkov To: netdev@vger.kernel.org, io-uring@vger.kernel.org Cc: Michael Chan , Pavan Chebbi , Andrew Lunn , "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jesper Dangaard Brouer , John Fastabend , Stanislav Fomichev , Simon Horman , Ilias Apalodimas , Mina Almasry , Pavel Begunkov , Willem de Bruijn , Dragos Tatulea , Saeed Mahameed , Tariq Toukan , Mark Bloch , David Wei , linux-kernel@vger.kernel.org Subject: [PATCH net-next v5 5/6] eth: bnxt: adjust the fill level of agg queues with larger buffers Date: Tue, 14 Oct 2025 14:01:25 +0100 Message-ID: <1a9ae7fc9d06111b14f29d0b81ceae9841056bf9.1760440268.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 61943de13774..950e60d204cb 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.49.0