On Fri, May 10, 2013 at 12:54:00AM +0200, Francois Romieu wrote: > commit ce11ff5e5963e441feb591e76278528f876c332d upstream. Thanks, I'm queuing it for the 3.5.y kernel. Cheers, -- Luis > > Control of receive descriptor must not be returned to ethernet > chipset before vlan tag processing is done. > > VLAN tag receive word is now reset both in normal and error path. > > Signed-off-by: Francois Romieu <romieu@xxxxxxxxxxxxx> > Spotted-by: Timo Teras <timo.teras@xxxxxx> > Cc: Hayes Wang <hayeswang@xxxxxxxxxxx> > Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx> > --- > drivers/net/ethernet/realtek/r8169.c | 14 ++++++-------- > 1 file changed, 6 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c > index de68de3..32ffe50 100644 > --- a/drivers/net/ethernet/realtek/r8169.c > +++ b/drivers/net/ethernet/realtek/r8169.c > @@ -1687,8 +1687,6 @@ static void rtl8169_rx_vlan_tag(struct RxDesc *desc, struct sk_buff *skb) > > if (opts2 & RxVlanTag) > __vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff)); > - > - desc->opts2 = 0; > } > > static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd) > @@ -5796,8 +5794,6 @@ static int rtl_rx(struct net_device *dev, struct rtl8169_private *tp, u32 budget > !(status & (RxRWT | RxFOVF)) && > (dev->features & NETIF_F_RXALL)) > goto process_pkt; > - > - rtl8169_mark_to_asic(desc, rx_buf_sz); > } else { > struct sk_buff *skb; > dma_addr_t addr; > @@ -5818,16 +5814,14 @@ process_pkt: > if (unlikely(rtl8169_fragmented_frame(status))) { > dev->stats.rx_dropped++; > dev->stats.rx_length_errors++; > - rtl8169_mark_to_asic(desc, rx_buf_sz); > - continue; > + goto release_descriptor; > } > > skb = rtl8169_try_rx_copy(tp->Rx_databuff[entry], > tp, pkt_size, addr); > - rtl8169_mark_to_asic(desc, rx_buf_sz); > if (!skb) { > dev->stats.rx_dropped++; > - continue; > + goto release_descriptor; > } > > rtl8169_rx_csum(skb, status); > @@ -5843,6 +5837,10 @@ process_pkt: > tp->rx_stats.bytes += pkt_size; > u64_stats_update_end(&tp->rx_stats.syncp); > } > +release_descriptor: > + desc->opts2 = 0; > + wmb(); > + rtl8169_mark_to_asic(desc, rx_buf_sz); > } > > count = cur_rx - tp->cur_rx; > -- > 1.8.1.4 > > -- > To unsubscribe from this list: send the line "unsubscribe stable" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html