Re: [PATCH net-next 3/4] eth: mpnic: set Rx buffer minimums using page size and mtu
flat view
From: Harshitha Ramamurthy <hramamurthy@google.com>
Date: 2026-10-03 00:50:13
Also in:
lkml
On Thu, Oct 1, 2026 at 9:46 AM Daniel Zahka [off-list ref] wrote:
Set buffer based drop thresholds in the Rx path based on page size and the max MTU supported. The device will drop packets if it does not have at least the minimum number of completely unused buffer descriptors available. These thresholds are currently set to 17 BDs for both HPQ and PPQ. These
nit: if there is a v2, it would be helpful for review if terms like PPQ/HPQ were expanded here.
quoted hunk ↗ jump to hunk
are overly conservative. With our current max MTU of 9742B, the settings we should target are: 4KiB page size: 1 HPQ, 3 PPQ 64KiB page size: 1 HPQ, 1 PPQ The HPQ and PPQ rings are always given PAGE_SIZE sized buffers. The RDE_CTL register encodes the thresholds as one less than the number of BDs needed. Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com> --- drivers/net/ethernet/meta/mpnic/mpnic_init.c | 13 +++++++++---- drivers/net/ethernet/meta/mpnic/mpnic_txrx.h | 6 ++++++ 2 files changed, 15 insertions(+), 4 deletions(-)diff --git a/drivers/net/ethernet/meta/mpnic/mpnic_init.c b/drivers/net/ethernet/meta/mpnic/mpnic_init.c index 2daed458f5fc..ace4124158fb 100644 --- a/drivers/net/ethernet/meta/mpnic/mpnic_init.c +++ b/drivers/net/ethernet/meta/mpnic/mpnic_init.c@@ -10,6 +10,7 @@ #include <linux/sizes.h> #include "mpnic.h" +#include "mpnic_txrx.h" #define MPNIC_MEM_INIT_POLL_US 500 #define MPNIC_MEM_INIT_TO_US 5000@@ -272,10 +273,14 @@ static void mpnic_rxglb_init(struct mpnic_dev *mpd) * the per-queue prefetch FIFO. */ mpnic_wr64(mpd, MPNIC_RDE_CTL, - FIELD_PREP(MPNIC_RDE_CTL_HPQ_DROP_THRESHOLD, 16) | - FIELD_PREP(MPNIC_RDE_CTL_PPQ_DROP_THRESHOLD, 16) | - FIELD_PREP(MPNIC_RDE_CTL_HPQ_LOCAL_DROP_THRESHOLD, 16) | - FIELD_PREP(MPNIC_RDE_CTL_PPQ_LOCAL_DROP_THRESHOLD, 16)); + FIELD_PREP(MPNIC_RDE_CTL_HPQ_DROP_THRESHOLD, + MPNIC_RX_HPQ_DROP_THRS - 1) | + FIELD_PREP(MPNIC_RDE_CTL_PPQ_DROP_THRESHOLD, + MPNIC_RX_PPQ_DROP_THRS - 1) | + FIELD_PREP(MPNIC_RDE_CTL_HPQ_LOCAL_DROP_THRESHOLD, + MPNIC_RX_HPQ_DROP_THRS - 1) | + FIELD_PREP(MPNIC_RDE_CTL_PPQ_LOCAL_DROP_THRESHOLD, + MPNIC_RX_PPQ_DROP_THRS - 1)); /* Receive side coalescing is not supported yet */ mpnic_wr64(mpd, MPNIC_RSC_GLOBAL_CONF,diff --git a/drivers/net/ethernet/meta/mpnic/mpnic_txrx.h b/drivers/net/ethernet/meta/mpnic/mpnic_txrx.h index 834eb9bfffd1..9397010557eb 100644 --- a/drivers/net/ethernet/meta/mpnic/mpnic_txrx.h +++ b/drivers/net/ethernet/meta/mpnic/mpnic_txrx.h@@ -58,6 +58,12 @@ struct mpnic_net; #define MPNIC_MAX_JUMBO_FRAME_SIZE 9742 +#define MPNIC_RX_HPQ_DROP_THRS \ + DIV_ROUND_UP(MPNIC_RX_HROOM + MPNIC_RX_MAX_HDR + MPNIC_RX_TROOM, \ + PAGE_SIZE) +#define MPNIC_RX_PPQ_DROP_THRS \ + DIV_ROUND_UP(MPNIC_MAX_JUMBO_FRAME_SIZE, PAGE_SIZE) + /* The page a buffer descriptor queue is currently handing out. Records * how many of the references taken on it are still unused. */ --2.52.0