|
@@ -6836,14 +6836,6 @@ err_out:
|
|
return -EIO;
|
|
return -EIO;
|
|
}
|
|
}
|
|
|
|
|
|
-static bool rtl_skb_pad(struct sk_buff *skb)
|
|
|
|
-{
|
|
|
|
- if (skb_padto(skb, ETH_ZLEN))
|
|
|
|
- return false;
|
|
|
|
- skb_put(skb, ETH_ZLEN - skb->len);
|
|
|
|
- return true;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static bool rtl_test_hw_pad_bug(struct rtl8169_private *tp, struct sk_buff *skb)
|
|
static bool rtl_test_hw_pad_bug(struct rtl8169_private *tp, struct sk_buff *skb)
|
|
{
|
|
{
|
|
return skb->len < ETH_ZLEN && tp->mac_version == RTL_GIGA_MAC_VER_34;
|
|
return skb->len < ETH_ZLEN && tp->mac_version == RTL_GIGA_MAC_VER_34;
|
|
@@ -6984,7 +6976,7 @@ static bool rtl8169_tso_csum_v2(struct rtl8169_private *tp,
|
|
u8 ip_protocol;
|
|
u8 ip_protocol;
|
|
|
|
|
|
if (unlikely(rtl_test_hw_pad_bug(tp, skb)))
|
|
if (unlikely(rtl_test_hw_pad_bug(tp, skb)))
|
|
- return skb_checksum_help(skb) == 0 && rtl_skb_pad(skb);
|
|
|
|
|
|
+ return !(skb_checksum_help(skb) || eth_skb_pad(skb));
|
|
|
|
|
|
if (transport_offset > TCPHO_MAX) {
|
|
if (transport_offset > TCPHO_MAX) {
|
|
netif_warn(tp, tx_err, tp->dev,
|
|
netif_warn(tp, tx_err, tp->dev,
|
|
@@ -7019,7 +7011,7 @@ static bool rtl8169_tso_csum_v2(struct rtl8169_private *tp,
|
|
opts[1] |= transport_offset << TCPHO_SHIFT;
|
|
opts[1] |= transport_offset << TCPHO_SHIFT;
|
|
} else {
|
|
} else {
|
|
if (unlikely(rtl_test_hw_pad_bug(tp, skb)))
|
|
if (unlikely(rtl_test_hw_pad_bug(tp, skb)))
|
|
- return rtl_skb_pad(skb);
|
|
|
|
|
|
+ return !eth_skb_pad(skb);
|
|
}
|
|
}
|
|
|
|
|
|
return true;
|
|
return true;
|