]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: libwx: fix Tx L4 checksum
authorJiawen Wu <jiawenwu@trustnetic.com>
Mon, 24 Mar 2025 10:32:35 +0000 (18:32 +0800)
committerJakub Kicinski <kuba@kernel.org>
Tue, 25 Mar 2025 21:00:32 +0000 (14:00 -0700)
The hardware only supports L4 checksum offload for TCP/UDP/SCTP protocol.
There was a bug to set Tx checksum flag for the other protocol that results
in Tx ring hang. Fix to compute software checksum for these packets.

Fixes: 3403960cdf86 ("net: wangxun: libwx add tx offload functions")
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
Link: https://patch.msgid.link/20250324103235.823096-2-jiawenwu@trustnetic.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/wangxun/libwx/wx_lib.c

index 9294a9d8c554107be632a0c12c1d5bab1cdba870..497abf2723a5e4db03e29957ae9cb801ee1e8d95 100644 (file)
@@ -1337,6 +1337,7 @@ static void wx_tx_csum(struct wx_ring *tx_ring, struct wx_tx_buffer *first,
        u8 tun_prot = 0;
 
        if (skb->ip_summed != CHECKSUM_PARTIAL) {
+csum_failed:
                if (!(first->tx_flags & WX_TX_FLAGS_HW_VLAN) &&
                    !(first->tx_flags & WX_TX_FLAGS_CC))
                        return;
@@ -1441,7 +1442,8 @@ static void wx_tx_csum(struct wx_ring *tx_ring, struct wx_tx_buffer *first,
                                        WX_TXD_L4LEN_SHIFT;
                        break;
                default:
-                       break;
+                       skb_checksum_help(skb);
+                       goto csum_failed;
                }
 
                /* update TX checksum flag */