From: Michal Swiatkowski There is no need to check for NETIF_HW_CSUM. If the code reach calculating checksum it means that correct checksum flags are set, because kernel is checking that when setting ip->summed. Instead of netdev feature flag use Tx ring flag to check if the hardware can use special descriptor for checksum calculating. Reviewed-by: Przemek Kitszel Reviewed-by: Aleksandr Loktionov Signed-off-by: Michal Swiatkowski Tested-by: Alexander Nowlin Signed-off-by: Tony Nguyen --- drivers/net/ethernet/intel/ice/ice_lib.c | 4 ++++ drivers/net/ethernet/intel/ice/ice_txrx.c | 2 +- drivers/net/ethernet/intel/ice/ice_txrx.h | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c index 8cdc4fda89e9..fc9d4e0fa755 100644 --- a/drivers/net/ethernet/intel/ice/ice_lib.c +++ b/drivers/net/ethernet/intel/ice/ice_lib.c @@ -1415,6 +1415,10 @@ static int ice_vsi_alloc_rings(struct ice_vsi *vsi) set_bit(ICE_TX_RING_FLAGS_VLAN_L2TAG2, ring->flags); else set_bit(ICE_TX_RING_FLAGS_VLAN_L2TAG1, ring->flags); + + if (ice_is_feature_supported(pf, ICE_F_GCS)) + set_bit(ICE_TX_RING_FLAGS_GCS, ring->flags); + WRITE_ONCE(vsi->tx_rings[i], ring); } diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c b/drivers/net/ethernet/intel/ice/ice_txrx.c index c04c5856dad6..b2063a54d6d8 100644 --- a/drivers/net/ethernet/intel/ice/ice_txrx.c +++ b/drivers/net/ethernet/intel/ice/ice_txrx.c @@ -1739,7 +1739,7 @@ int ice_tx_csum(struct ice_tx_buf *first, struct ice_tx_offload_params *off) l3_len = l4.hdr - ip.hdr; offset |= (l3_len / 4) << ICE_TX_DESC_LEN_IPLEN_S; - if ((tx_ring->netdev->features & NETIF_F_HW_CSUM) && + if (test_bit(ICE_TX_RING_FLAGS_GCS, tx_ring->flags) && !(first->tx_flags & ICE_TX_FLAGS_TSO) && !skb_csum_is_sctp(skb)) { /* Set GCS */ diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.h b/drivers/net/ethernet/intel/ice/ice_txrx.h index 5e517f219379..15dbd5100912 100644 --- a/drivers/net/ethernet/intel/ice/ice_txrx.h +++ b/drivers/net/ethernet/intel/ice/ice_txrx.h @@ -217,6 +217,7 @@ enum ice_tx_ring_flags { ICE_TX_RING_FLAGS_VLAN_L2TAG1, ICE_TX_RING_FLAGS_VLAN_L2TAG2, ICE_TX_RING_FLAGS_TXTIME, + ICE_TX_RING_FLAGS_GCS, ICE_TX_RING_FLAGS_NBITS, }; -- 2.47.1