diff options
Diffstat (limited to 'drivers/net/ethernet/realtek/r8169.c')
-rw-r--r-- | drivers/net/ethernet/realtek/r8169.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index c28bc318cec6..11702324a071 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c | |||
@@ -1826,8 +1826,6 @@ static void rtl8169_rx_vlan_tag(struct RxDesc *desc, struct sk_buff *skb) | |||
1826 | 1826 | ||
1827 | if (opts2 & RxVlanTag) | 1827 | if (opts2 & RxVlanTag) |
1828 | __vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff)); | 1828 | __vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff)); |
1829 | |||
1830 | desc->opts2 = 0; | ||
1831 | } | 1829 | } |
1832 | 1830 | ||
1833 | static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd) | 1831 | static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd) |
@@ -6064,8 +6062,6 @@ static int rtl_rx(struct net_device *dev, struct rtl8169_private *tp, u32 budget | |||
6064 | !(status & (RxRWT | RxFOVF)) && | 6062 | !(status & (RxRWT | RxFOVF)) && |
6065 | (dev->features & NETIF_F_RXALL)) | 6063 | (dev->features & NETIF_F_RXALL)) |
6066 | goto process_pkt; | 6064 | goto process_pkt; |
6067 | |||
6068 | rtl8169_mark_to_asic(desc, rx_buf_sz); | ||
6069 | } else { | 6065 | } else { |
6070 | struct sk_buff *skb; | 6066 | struct sk_buff *skb; |
6071 | dma_addr_t addr; | 6067 | dma_addr_t addr; |
@@ -6086,16 +6082,14 @@ process_pkt: | |||
6086 | if (unlikely(rtl8169_fragmented_frame(status))) { | 6082 | if (unlikely(rtl8169_fragmented_frame(status))) { |
6087 | dev->stats.rx_dropped++; | 6083 | dev->stats.rx_dropped++; |
6088 | dev->stats.rx_length_errors++; | 6084 | dev->stats.rx_length_errors++; |
6089 | rtl8169_mark_to_asic(desc, rx_buf_sz); | 6085 | goto release_descriptor; |
6090 | continue; | ||
6091 | } | 6086 | } |
6092 | 6087 | ||
6093 | skb = rtl8169_try_rx_copy(tp->Rx_databuff[entry], | 6088 | skb = rtl8169_try_rx_copy(tp->Rx_databuff[entry], |
6094 | tp, pkt_size, addr); | 6089 | tp, pkt_size, addr); |
6095 | rtl8169_mark_to_asic(desc, rx_buf_sz); | ||
6096 | if (!skb) { | 6090 | if (!skb) { |
6097 | dev->stats.rx_dropped++; | 6091 | dev->stats.rx_dropped++; |
6098 | continue; | 6092 | goto release_descriptor; |
6099 | } | 6093 | } |
6100 | 6094 | ||
6101 | rtl8169_rx_csum(skb, status); | 6095 | rtl8169_rx_csum(skb, status); |
@@ -6111,6 +6105,10 @@ process_pkt: | |||
6111 | tp->rx_stats.bytes += pkt_size; | 6105 | tp->rx_stats.bytes += pkt_size; |
6112 | u64_stats_update_end(&tp->rx_stats.syncp); | 6106 | u64_stats_update_end(&tp->rx_stats.syncp); |
6113 | } | 6107 | } |
6108 | release_descriptor: | ||
6109 | desc->opts2 = 0; | ||
6110 | wmb(); | ||
6111 | rtl8169_mark_to_asic(desc, rx_buf_sz); | ||
6114 | } | 6112 | } |
6115 | 6113 | ||
6116 | count = cur_rx - tp->cur_rx; | 6114 | count = cur_rx - tp->cur_rx; |