Commit 0692cfe9 authored by Huazhong Tan's avatar Huazhong Tan Committed by David S. Miller
Browse files

net: hns3: add UDP segmentation offload support



Add support for UDP segmentation offload to the HNS3 driver
when the device can do it.

Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6ad595bc
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -696,12 +696,19 @@ static int hns3_set_tso(struct sk_buff *skb, u32 *paylen,

	/* normal or tunnel packet */
	l4_offset = l4.hdr - skb->data;
	hdr_len = (l4.tcp->doff << 2) + l4_offset;

	/* remove payload length from inner pseudo checksum when tso */
	l4_paylen = skb->len - l4_offset;

	if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) {
		hdr_len = sizeof(*l4.udp) + l4_offset;
		csum_replace_by_diff(&l4.udp->check,
				     (__force __wsum)htonl(l4_paylen));
	} else {
		hdr_len = (l4.tcp->doff << 2) + l4_offset;
		csum_replace_by_diff(&l4.tcp->check,
				     (__force __wsum)htonl(l4_paylen));
	}

	/* find the txbd field values */
	*paylen = skb->len - hdr_len;
@@ -2311,6 +2318,13 @@ static void hns3_set_default_feature(struct net_device *netdev)
			netdev->features |= NETIF_F_NTUPLE;
		}
	}

	if (test_bit(HNAE3_DEV_SUPPORT_UDP_GSO_B, ae_dev->caps)) {
		netdev->hw_features |= NETIF_F_GSO_UDP_L4;
		netdev->features |= NETIF_F_GSO_UDP_L4;
		netdev->vlan_features |= NETIF_F_GSO_UDP_L4;
		netdev->hw_enc_features |= NETIF_F_GSO_UDP_L4;
	}
}

static int hns3_alloc_buffer(struct hns3_enet_ring *ring,