Dear Jakub,
Thank you for your patch.
Am 10.03.26 um 12:55 schrieb Jakub Ramaseuski:
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.
Do you have a test case, you could document in the commit message?
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 |
Should this be sorted?
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.
*/
The diff looks good.
Reviewed-by: Paul Menzel <[email protected]>
Kind regards,
Paul