Commit 086efe0a authored by Joshua Hay's avatar Joshua Hay Committed by Tony Nguyen
Browse files

idpf: cap maximum Rx buffer size



The HW only supports a maximum Rx buffer size of 16K-128. On systems
using large pages, the libeth logic can configure the buffer size to be
larger than this. The upper bound is PAGE_SIZE while the lower bound is
MTU rounded up to the nearest power of 2. For example, ARM systems with
a 64K page size and an mtu of 9000 will set the Rx buffer size to 16K,
which will cause the config Rx queues message to fail.

Initialize the bufq/fill queue buf_len field to the maximum supported
size. This will trigger the libeth logic to cap the maximum Rx buffer
size by reducing the upper bound.

Fixes: 74d1412a ("idpf: use libeth Rx buffer management for payload buffer")
Signed-off-by: default avatarJoshua Hay <joshua.a.hay@intel.com>
Acked-by: default avatarAlexander Lobakin <aleksander.lobakin@intel.com>
Reviewed-by: default avatarMadhu Chittim <madhu.chittim@intel.com>
Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Reviewed-by: default avatarAleksandr Loktionov <aleksandr.loktionov@intel.com>
Reviewed-by: default avatarDavid Decotigny <ddecotig@google.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 87b8ee64
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -697,6 +697,7 @@ static int idpf_rx_bufs_init_singleq(struct idpf_rx_queue *rxq)
	struct libeth_fq fq = {
		.count		= rxq->desc_count,
		.type		= LIBETH_FQE_MTU,
		.buf_len	= IDPF_RX_MAX_BUF_SZ,
		.nid		= idpf_q_vector_to_mem(rxq->q_vector),
	};
	int ret;
@@ -754,6 +755,7 @@ static int idpf_rx_bufs_init(struct idpf_buf_queue *bufq,
		.truesize	= bufq->truesize,
		.count		= bufq->desc_count,
		.type		= type,
		.buf_len	= IDPF_RX_MAX_BUF_SZ,
		.hsplit		= idpf_queue_has(HSPLIT_EN, bufq),
		.xdp		= idpf_xdp_enabled(bufq->q_vector->vport),
		.nid		= idpf_q_vector_to_mem(bufq->q_vector),
+1 −0
Original line number Diff line number Diff line
@@ -101,6 +101,7 @@ do { \
		idx = 0;					\
} while (0)

#define IDPF_RX_MAX_BUF_SZ			(16384 - 128)
#define IDPF_RX_BUF_STRIDE			32
#define IDPF_RX_BUF_POST_STRIDE			16
#define IDPF_LOW_WATERMARK			64