Re: [PATCH net v3] net/mlx5e: do not HW-GRO coalesce small frames

Tariq Toukan <[email protected]>
Newsgroups org.kernel.vger.linux-rdma,org.kernel.vger.linux-kernel,org.kernel.vger.netdev
Message-ID <[email protected]>

On 06/08/2026 9:56, Glenn Judd wrote:
> When hardware GRO (SHAMPO) coalesces a small IPv4/TCP segment that was
> padded up to the 60-byte minimum Ethernet frame, the trailing padding is
> folded into the merged payload causing padding to be delivered
> to the user as payload.
> 
> Detecting and reproducing the issue: the selftest
> tools/testing/selftests/drivers/net/gro.py subtest
> hw_ipv4_data_lrg_1byte sends {100, 1} expecting to receive {101}.
> In current code, it receives {106} (100 + 1 payload + 5 pad) instead.
> 
> This patch avoids giving the user padding as payload by simply not
> coalescing small packets (which fails the subtest; the same approach
> and behavior as sw gro). This gains code simplicity at the cost of
> more computation (passing an extra skb up the stack) for small packets
> that could be coalesced.
> 
> The threshold is chosen as ETH_ZLEN + 2 * VLAN_HLEN. This is the largest
> frame that may still contain minimum-frame padding (+ 2 VLAN tags), so
> anything larger is safe to consider for coalesce. (We do not include
> ETH_FCS_LEN in that threshold computation as netdev_fix_features()
> drops NETIF_F_GRO_HW whenever NETIF_F_RXFCS is set, so retained FCS
> can't reach this path.)
> 
> Fixes: 92552d3abd32 ("net/mlx5e: HW_GRO cqe handler implementation")
> Cc: [email protected]
> Assisted-by: Claude:claude-opus-5
> Assisted-by: Meta:internal-AI-tooling
> Signed-off-by: Glenn Judd <[email protected]>
> ---
> Notes:
>      v3: Per reviewer request, redesigned to simply not coalesce
>          small packets. Dropping the v2 padding detection/removal.
>      v2: https://lore.kernel.org/netdev/[email protected]/
>      v1: https://lore.kernel.org/netdev/[email protected]/
> 
>   drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 5 +++++
>   1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
> index 04af54b704d8..68b4dc49ccea 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
> @@ -2263,6 +2263,11 @@ static void mlx5e_handle_rx_cqe_mpwrq_shampo(struct mlx5e_rq *rq, struct mlx5_cq
>   
>   	data_offset = wqe_offset & (page_size - 1);
>   	page_idx = wqe_offset >> rq->mpwqe.page_shift;
> +	if (unlikely(cqe_bcnt <= ETH_ZLEN + 2 * VLAN_HLEN)) {
> +		match = false;
> +		flush = true;
> +	}
> +
>   	if (*skb &&
>   	    !(match && mlx5e_hw_gro_skb_has_enough_space(*skb, data_bcnt,
>   							 page_size))) {
> 

Reviewed-by: Tariq Toukan <[email protected]>

Thanks for your patch.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.