> -----Original Message-----
> From: Intel-wired-lan <[email protected]> On Behalf
> Of Jakub Ramaseuski
> Sent: Tuesday, March 10, 2026 12:56 PM
> To: [email protected]
> Cc: [email protected]; Nguyen, Anthony L
> <[email protected]>; Kitszel, Przemyslaw
> <[email protected]>; Korba, Przemyslaw
> <[email protected]>; Jakub Ramaseuski <[email protected]>
> Subject: [Intel-wired-lan] [PATCH iwl-net] ice: enable NETIF_F_HW_CSUM
> for GSO packets
> 
> IPv4 over IPv6 GRE currently fails on E810 with skb_warn_bad_offload,
> while IPv6 over IPv6 GRE falls back to software segmentation.
> This happens because the kernel's GSO engine requires the generic
> HW_CSUM flag to trust the hardware with complex encapsulation
> offloads.
> 
> Add NETIF_F_HW_CSUM to the device's csumo_features to satisfy the
> network stack and unlock full hardware segmentation for GRE tunnels.
> To prevent checksum corruption on standard traffic, evaluate the
> packet in ice_features_check() and dynamically clear the
> NETIF_F_HW_CSUM bit if it is not a GSO frame. This forces the driver
> to fall back to safe, protocol-specific checksum features for non-GSO
> packets while preserving the generic offload for tunnels.
> 
Please update commit message with exact commands for reproduction if possible.

Reviewed-by: Aleksandr Loktionov <[email protected]>

> Signed-off-by: Jakub Ramaseuski <[email protected]>
> ---
>  drivers/net/ethernet/intel/ice/ice_main.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_main.c
> b/drivers/net/ethernet/intel/ice/ice_main.c
> index e7308e381e2f..9b4ad03e1a32 100644
> --- a/drivers/net/ethernet/intel/ice/ice_main.c
> +++ b/drivers/net/ethernet/intel/ice/ice_main.c
> @@ -3565,6 +3565,7 @@ void ice_set_netdev_features(struct net_device
> *netdev)
> 
>       csumo_features = NETIF_F_RXCSUM   |
>                        NETIF_F_IP_CSUM  |
> +                      NETIF_F_HW_CSUM  |
>                        NETIF_F_SCTP_CRC |
>                        NETIF_F_IPV6_CSUM;
> 
> @@ -9789,6 +9790,14 @@ ice_features_check(struct sk_buff *skb,
>       if (skb->ip_summed != CHECKSUM_PARTIAL)
>               return features;
> 
> +     /* Hardware requires strictly-typed Tx descriptors for non-GSO
> frames.
> +      * Leaving generic NETIF_F_HW_CSUM enabled corrupts checksums,
> +      * causing TCP drops. We strip it here to force safe,
> +      * protocol-specific IPv4/IPv6 offloads instead.
> +      */
> +     if (!gso)
> +             features &= ~NETIF_F_HW_CSUM;
> +
>       /* We cannot support GSO if the MSS is going to be less than
>        * 64 bytes. If it is then we need to drop support for GSO.
>        */
> --
> 2.52.0

Reply via email to