|
@@ -48,7 +48,6 @@ static void fill_v2_desc(struct hnae_ring *ring, void *priv,
|
|
|
struct iphdr *iphdr;
|
|
|
struct ipv6hdr *ipv6hdr;
|
|
|
struct sk_buff *skb;
|
|
|
- int skb_tmp_len;
|
|
|
__be16 protocol;
|
|
|
u8 bn_pid = 0;
|
|
|
u8 rrcfv = 0;
|
|
@@ -94,13 +93,13 @@ static void fill_v2_desc(struct hnae_ring *ring, void *priv,
|
|
|
hnae_set_bit(rrcfv, HNSV2_TXD_L4CS_B, 1);
|
|
|
|
|
|
/* check for tcp/udp header */
|
|
|
- if (iphdr->protocol == IPPROTO_TCP) {
|
|
|
+ if (iphdr->protocol == IPPROTO_TCP &&
|
|
|
+ skb_is_gso(skb)) {
|
|
|
hnae_set_bit(tvsvsn,
|
|
|
HNSV2_TXD_TSE_B, 1);
|
|
|
- skb_tmp_len = SKB_TMP_LEN(skb);
|
|
|
l4_len = tcp_hdrlen(skb);
|
|
|
- mss = mtu - skb_tmp_len - ETH_FCS_LEN;
|
|
|
- paylen = skb->len - skb_tmp_len;
|
|
|
+ mss = skb_shinfo(skb)->gso_size;
|
|
|
+ paylen = skb->len - SKB_TMP_LEN(skb);
|
|
|
}
|
|
|
} else if (skb->protocol == htons(ETH_P_IPV6)) {
|
|
|
hnae_set_bit(tvsvsn, HNSV2_TXD_IPV6_B, 1);
|
|
@@ -108,13 +107,13 @@ static void fill_v2_desc(struct hnae_ring *ring, void *priv,
|
|
|
hnae_set_bit(rrcfv, HNSV2_TXD_L4CS_B, 1);
|
|
|
|
|
|
/* check for tcp/udp header */
|
|
|
- if (ipv6hdr->nexthdr == IPPROTO_TCP) {
|
|
|
+ if (ipv6hdr->nexthdr == IPPROTO_TCP &&
|
|
|
+ skb_is_gso(skb) && skb_is_gso_v6(skb)) {
|
|
|
hnae_set_bit(tvsvsn,
|
|
|
HNSV2_TXD_TSE_B, 1);
|
|
|
- skb_tmp_len = SKB_TMP_LEN(skb);
|
|
|
l4_len = tcp_hdrlen(skb);
|
|
|
- mss = mtu - skb_tmp_len - ETH_FCS_LEN;
|
|
|
- paylen = skb->len - skb_tmp_len;
|
|
|
+ mss = skb_shinfo(skb)->gso_size;
|
|
|
+ paylen = skb->len - SKB_TMP_LEN(skb);
|
|
|
}
|
|
|
}
|
|
|
desc->tx.ip_offset = ip_offset;
|