From nobody Thu Dec 18 01:36:43 2025 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (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 896C6313270 for ; Mon, 13 Oct 2025 14:53:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760367240; cv=none; b=JXVho9b/VxC5TIq3lZQLx0/Kwt8BwhixudkgVUC0/wMbvxQE9ZkWE/tB6vSLUtuibhEL1QgmyJ4WASl7JvMgLcWhTk2CRmuSbQPvpLjy3Lo+MrAWcHlrVIr9avcD3P9+MxSfMQJ7n2Cgv7JFUaC0wb11et0adbmD8WUPUOiAkU8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760367240; c=relaxed/simple; bh=b8FGPOYez3J824Dr7qxiyxcRaNo5kRct9HxQwv0g5HI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tbvFFnURpoJz7IVrtSKaf5XWr/CCixlOP4GhEVhp3bJiAs0PeDXHVkYk5rPI6yJOaxK1NNDGr8m3Iyk11OwrZreIeWp4rjEZyAbEU5XTr/6AcWIVyifWuPXW6pI1IBjK85f/RUe9zwSEZlmqwAerkzaeozQBxoOtdhDgRGIehA0= 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=ZMPj6k4J; arc=none smtp.client-ip=209.85.221.50 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="ZMPj6k4J" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-3ecde0be34eso2755510f8f.1 for ; Mon, 13 Oct 2025 07:53:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760367236; x=1760972036; 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=pxHRXya3lXGBnReUxXIEEoBgDfJjb/lzzOFKtNAVoFE=; b=ZMPj6k4J7AH41Cm38BsKO3Hkad0NDoCGKeEHI1MakyrzvfEQmya8BdeCJSTKEr1SjZ /2ts1XC9SUG89Id0fxjQ8f18w3FMAWA8wRXS3GZtAo64sot9AaP1R+uMsklLLQqA0eca 7Tq+jSV67uc1ujmy9K70ozYUXppTPVCw9QzWvzJhXAlGjgXBkRfsTVFcyqB+eyjn9fhT kx0WLzd0Z5FZjHXZ2kggYZ10G1aYjeuumIpCAUG3cVnmsmp1r2o8VnIGkM3rMjbE6ZYO KXdmX78lZGBAyVluvum3LM6xcqZK7xSbfLcmdXnG48/99TPFv+u4/hbPCtLf6hQVOMcc NlXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760367236; x=1760972036; 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=pxHRXya3lXGBnReUxXIEEoBgDfJjb/lzzOFKtNAVoFE=; b=e0KpcFFzDrkvO3otXDujPdk8GkRiUphOZpYOLgwjQCpRGJ0H2aN2yW2QLQuM//DQKo LA2v5Alm5/sAI7+Ohz+hOpsE/EA8xsZgJSL7PCCWuBAn0bwuxcmVwCWI8h+UnzbXZAk0 qc7VpSDkyS4bMorKooBTgYWMeMxwMb/lLyh6p14EOkIkgV5uQ078eJKNqfK+xbLmsCpP cMTyO+MRgrFsG76XL50kWfxy7CL3X9rJVYqa+t3T7rkRIuzwJa2XXgdN9ewT1GxMrv1w FHOwrX3rFkZMAeBdOVmy1MPuJxzOeBZUQGD6C67EFh8BazoKtRtO8n+BcFFGCaGrw07q 7i4w== X-Forwarded-Encrypted: i=1; AJvYcCV5p23uW0nOkUD/s36Idn61xt/l8lem/FYNLy64bbcpSIXjCVTEoVgBqHomH5dQ0cK1JrjYct6AoF/y3Wk=@vger.kernel.org X-Gm-Message-State: AOJu0YyNkVEcxsNkiu/ZmudhOu+qaffuS2AMWDXbPc85VA2R4G2dbYO9 81kJHousgBH8qv2e0ujtyFXXx6dlncPTLRXMhf4wTho5mNNURb7EVQr/ X-Gm-Gg: ASbGncuZvKcDjAkq+G5N9bEcNppuIu/g/q4rFxA5xT7fDXTMU+ReHGSXFAE7rdM2dKX HXv/JBPHe6qZEZZCZXp2tcRNfz1PYaxiqMk9zSTP0xTJZAuH15ZTrNMNrYBPO57cBs6kt9Mv5QW 6iQnwWn5rBQTTMlKYZicYcOIQvj/V5I7a4g4RfSn42u3ELNZ5SOKmB5qu/RConvx0nfOBWXEFM5 3b5gxs9hqIjwjF6Xv3MQzVSvSkGyXKUQaMgQSBOBqfzBhd334LW6Yg0ZfRFpWgukqB7dOT1WkDn gtTEMzGO3Rpij4cnAqOqgZddDLj+KSpqakG299BgbLh54HQADxLTO6NW3+h48ssj0UO73DlzmpW recy/niCjxKzQxhPCy0mTPaVJ X-Google-Smtp-Source: AGHT+IG0JaMqrygloaBo/Hgni68I4c0N36CFgBnj1m1GOH+xECQ5fun7HUBRPJc+Mht1oZD+K4qurw== X-Received: by 2002:a05:6000:2502:b0:425:86da:325f with SMTP id ffacd0b85a97d-4266e7cf047mr15243982f8f.27.1760367235639; Mon, 13 Oct 2025 07:53:55 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:eb09]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5e0e70sm18641085f8f.40.2025.10.13.07.53.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Oct 2025 07:53:54 -0700 (PDT) From: Pavel Begunkov To: netdev@vger.kernel.org Cc: Andrew Lunn , Jakub Kicinski , davem@davemloft.net, Eric Dumazet , Paolo Abeni , Simon Horman , Donald Hunter , Michael Chan , Pavan Chebbi , Jesper Dangaard Brouer , John Fastabend , Stanislav Fomichev , Joshua Washington , Harshitha Ramamurthy , Jian Shen , Salil Mehta , Jijie Shao , Sunil Goutham , Geetha sowjanya , Subbaraya Sundeep , hariprasad , Bharat Bhushan , Saeed Mahameed , Tariq Toukan , Mark Bloch , Leon Romanovsky , Alexander Duyck , kernel-team@meta.com, Ilias Apalodimas , Joe Damato , David Wei , Willem de Bruijn , Mina Almasry , Pavel Begunkov , Breno Leitao , Dragos Tatulea , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-rdma@vger.kernel.org, Jonathan Corbet Subject: [PATCH net-next v4 18/24] eth: bnxt: adjust the fill level of agg queues with larger buffers Date: Mon, 13 Oct 2025 15:54:20 +0100 Message-ID: <6c14fdceadaf7fb8e81584aec551c9a9fddc6625.1760364551.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 e4dba91332ae..1741aeffee55 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 > bp->rx_page_size) + fill_level /=3D rxr->rx_page_size / bp->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