diff options
Diffstat (limited to 'drivers/net/ethernet/realtek/r8169.c')
-rw-r--r-- | drivers/net/ethernet/realtek/r8169.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index 2d849da4c566..2d56d7160a23 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c | |||
@@ -5779,6 +5779,14 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, | |||
5779 | goto err_stop_0; | 5779 | goto err_stop_0; |
5780 | } | 5780 | } |
5781 | 5781 | ||
5782 | /* 8168evl does not automatically pad to minimum length. */ | ||
5783 | if (unlikely(tp->mac_version == RTL_GIGA_MAC_VER_34 && | ||
5784 | skb->len < ETH_ZLEN)) { | ||
5785 | if (skb_padto(skb, ETH_ZLEN)) | ||
5786 | goto err_update_stats; | ||
5787 | skb_put(skb, ETH_ZLEN - skb->len); | ||
5788 | } | ||
5789 | |||
5782 | if (unlikely(le32_to_cpu(txd->opts1) & DescOwn)) | 5790 | if (unlikely(le32_to_cpu(txd->opts1) & DescOwn)) |
5783 | goto err_stop_0; | 5791 | goto err_stop_0; |
5784 | 5792 | ||
@@ -5850,6 +5858,7 @@ err_dma_1: | |||
5850 | rtl8169_unmap_tx_skb(d, tp->tx_skb + entry, txd); | 5858 | rtl8169_unmap_tx_skb(d, tp->tx_skb + entry, txd); |
5851 | err_dma_0: | 5859 | err_dma_0: |
5852 | dev_kfree_skb(skb); | 5860 | dev_kfree_skb(skb); |
5861 | err_update_stats: | ||
5853 | dev->stats.tx_dropped++; | 5862 | dev->stats.tx_dropped++; |
5854 | return NETDEV_TX_OK; | 5863 | return NETDEV_TX_OK; |
5855 | 5864 | ||