]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ice: pass the return value of skb_checksum_help()
authorMichal Swiatkowski <michal.swiatkowski@linux.intel.com>
Fri, 17 Jul 2026 18:53:25 +0000 (11:53 -0700)
committerJakub Kicinski <kuba@kernel.org>
Thu, 23 Jul 2026 16:00:50 +0000 (09:00 -0700)
skb_checksum_help() can fail. Pass its return value back to the caller.

Commonize this software path in goto.

Instead of just returning error try calculating software checksum first.
There is a check for TSO in checksum_sw_fb.

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Link: https://patch.msgid.link/20260717185340.3595286-4-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/intel/ice/ice_txrx.c

index 4ca1a0602307d076153f77671e8c9a6ff4f8dd28..c04c5856dad6e2bbc7528bcc9c1e71418d8dcb97 100644 (file)
@@ -1654,7 +1654,7 @@ int ice_tx_csum(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
                        ret = ipv6_skip_exthdr(skb, exthdr - skb->data,
                                               &l4_proto, &frag_off);
                        if (ret < 0)
-                               return -1;
+                               goto checksum_sw_fb;
                }
 
                /* define outer transport */
@@ -1673,11 +1673,7 @@ int ice_tx_csum(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
                        l4.hdr = skb_inner_network_header(skb);
                        break;
                default:
-                       if (first->tx_flags & ICE_TX_FLAGS_TSO)
-                               return -1;
-
-                       skb_checksum_help(skb);
-                       return 0;
+                       goto checksum_sw_fb;
                }
 
                /* compute outer L3 header size */
@@ -1736,7 +1732,7 @@ int ice_tx_csum(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
                        ipv6_skip_exthdr(skb, exthdr - skb->data, &l4_proto,
                                         &frag_off);
        } else {
-               return -1;
+               goto checksum_sw_fb;
        }
 
        /* compute inner L3 header size */
@@ -1789,15 +1785,17 @@ int ice_tx_csum(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
                break;
 
        default:
-               if (first->tx_flags & ICE_TX_FLAGS_TSO)
-                       return -1;
-               skb_checksum_help(skb);
-               return 0;
+               goto checksum_sw_fb;
        }
 
        off->td_cmd |= cmd;
        off->td_offset |= offset;
        return 1;
+
+checksum_sw_fb:
+       if (first->tx_flags & ICE_TX_FLAGS_TSO)
+               return -1;
+       return skb_checksum_help(skb);
 }
 
 /**