Thanks, but I'm about to push out 3.6.11.3 and this just missed the cut off. I'll queue it for 3.6.11.4 Thanks, -- Steve On Fri, 2013-05-10 at 00:55 +0200, Francois Romieu wrote: > commit ce11ff5e5963e441feb591e76278528f876c332d upstream. > > 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 adc91c3..30f1ae9 100644 > --- a/drivers/net/ethernet/realtek/r8169.c > +++ b/drivers/net/ethernet/realtek/r8169.c > @@ -1834,8 +1834,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) > @@ -6050,8 +6048,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; > @@ -6072,16 +6068,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); > @@ -6097,6 +6091,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; -- 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