RE: [PATCH iwl-next 1/8] e1000e: add jumbo Rx CRC stripping

From: Loktionov, Aleksandr

Date: Mon Aug 31 2026 - 01:58:04 EST




> -----Original Message-----
> From: Matt Vollrath <tactii@xxxxxxxxx>
> Sent: Monday, August 31, 2026 1:22 AM
> To: intel-wired-lan@xxxxxxxxxxxxxxxx
> Cc: netdev@xxxxxxxxxxxxxxx; Nguyen, Anthony L
> <anthony.l.nguyen@xxxxxxxxx>; Kitszel, Przemyslaw
> <przemyslaw.kitszel@xxxxxxxxx>; Lobakin, Aleksander
> <aleksander.lobakin@xxxxxxxxx>; Andrew Lunn <andrew+netdev@xxxxxxx>;
> David S . Miller <davem@xxxxxxxxxxxxx>; Eric Dumazet
> <edumazet@xxxxxxxxxx>; Jakub Kicinski <kuba@xxxxxxxxxx>; Paolo Abeni
> <pabeni@xxxxxxxxxx>; Simon Horman <horms@xxxxxxxxxx>; Jonathan Corbet
> <corbet@xxxxxxx>; Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx>; linux-
> doc@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Matt Vollrath
> <tactii@xxxxxxxxx>
> Subject: [PATCH iwl-next 1/8] e1000e: add jumbo Rx CRC stripping
>
> When the hardware is configured to not strip the FCS (CrcStripping=0),
> the jumbo Rx path would deliver frames with the FCS still attached.
> Follow the standard path's convention by stripping the FCS at EOP and
> leaving it out of the byte count.
>
> The jumbo path was omitted when the CrcStripping feature was added.
> Since v3.3[1], the jumbo path has only been used where the page size
> is over 16K, which practically rules out LOMs, BMC sideband, and the
> need to leave FCS on frames. The bug is only reachable only by setting
"only" is duplicated

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@xxxxxxxxx>

> CrcStripping=0 on a platform with nothing that needs it.
>
> This change prepares for convergence of Rx onto the jumbo path in
> following patches. The set of h/w routed through this path will expand
> to include LOMs.
>
> [1] Commit 79d4e9087a6e ("e1000e: disable Early Receive DMA on ICH
> LOMs")
>
> Signed-off-by: Matt Vollrath <tactii@xxxxxxxxx>
> Fixes: eb7c3adb1ca9 ("e1000e: fix IPMI traffic")
> Assisted-by: Claude:claude-5-fable
> ---
> drivers/net/ethernet/intel/e1000e/netdev.c | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c
> b/drivers/net/ethernet/intel/e1000e/netdev.c
> index 844f31ab37ad..599600ad695c 100644
> --- a/drivers/net/ethernet/intel/e1000e/netdev.c
> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
> @@ -1631,13 +1631,23 @@ static bool e1000_clean_jumbo_rx_irq(struct
> e1000_ring *rx_ring, int *work_done,
> }
> }
>
> + /* strip the Ethernet CRC; it may span fragments */
> + if (!(adapter->flags2 & FLAG2_CRC_STRIPPING) &&
> + !(netdev->features & NETIF_F_RXFCS))
> + pskb_trim(skb, skb->len - 4);
> +
> /* Receive Checksum Offload */
> e1000_rx_checksum(adapter, staterr, skb);
>
> e1000_rx_hash(netdev, rx_desc->wb.lower.hi_dword.rss,
> skb);
>
> - /* probably a little skewed due to removing CRC */
> total_rx_bytes += skb->len;
> + /* If configured to store CRC, keep the FCS bytes out of
> the
> + * total_rx_bytes counter
> + */
> + if (!(adapter->flags2 & FLAG2_CRC_STRIPPING) &&
> + (netdev->features & NETIF_F_RXFCS))
> + total_rx_bytes -= 4;
> total_rx_packets++;
>
> /* eth type trans needs skb->data to point to something
> */
> --
> 2.43.0