On Fri, May 10, 2013 at 12:55:12AM +0200, Francois Romieu wrote: > From: Tomi Orava <tomimo@xxxxxxxxxxxxxxxxxx> > > commit faf1e7857a1b87cd8baf48c3e962142e21ad417c upstream Thanks, I'm queuing it for the 3.5.y kernel. Cheers, -- Luis > > Some hardware start settings implicitely assume an usual 1500 bytes > mtu that can't be guaranteed because changes of mtu may be requested > both before and after the hardware is started. > > Reported-by: Tomi Orava <tomimo@xxxxxxxxxxxxxxxxxx> > Signed-off-by: Francois Romieu <romieu@xxxxxxxxxxxxx> > Cc: Hayes Wang <hayeswang@xxxxxxxxxxx> > Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx> > --- > drivers/net/ethernet/realtek/r8169.c | 27 ++++++++++++++++++--------- > 1 file changed, 18 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c > index 32ffe50..5dcbbe3 100644 > --- a/drivers/net/ethernet/realtek/r8169.c > +++ b/drivers/net/ethernet/realtek/r8169.c > @@ -4574,8 +4574,10 @@ static void rtl_hw_start_8168bb(struct rtl8169_private *tp) > > RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK); > > - rtl_tx_performance_tweak(pdev, > - (0x5 << MAX_READ_REQUEST_SHIFT) | PCI_EXP_DEVCTL_NOSNOOP_EN); > + if (tp->dev->mtu <= ETH_DATA_LEN) { > + rtl_tx_performance_tweak(pdev, (0x5 << MAX_READ_REQUEST_SHIFT) | > + PCI_EXP_DEVCTL_NOSNOOP_EN); > + } > } > > static void rtl_hw_start_8168bef(struct rtl8169_private *tp) > @@ -4598,7 +4600,8 @@ static void __rtl_hw_start_8168cp(struct rtl8169_private *tp) > > RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en); > > - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > + if (tp->dev->mtu <= ETH_DATA_LEN) > + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > > rtl_disable_clock_request(pdev); > > @@ -4632,7 +4635,8 @@ static void rtl_hw_start_8168cp_2(struct rtl8169_private *tp) > > RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en); > > - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > + if (tp->dev->mtu <= ETH_DATA_LEN) > + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > > RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK); > } > @@ -4651,7 +4655,8 @@ static void rtl_hw_start_8168cp_3(struct rtl8169_private *tp) > > RTL_W8(MaxTxPacketSize, TxPacketMax); > > - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > + if (tp->dev->mtu <= ETH_DATA_LEN) > + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > > RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK); > } > @@ -4712,7 +4717,8 @@ static void rtl_hw_start_8168d(struct rtl8169_private *tp) > > RTL_W8(MaxTxPacketSize, TxPacketMax); > > - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > + if (tp->dev->mtu <= ETH_DATA_LEN) > + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > > RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK); > } > @@ -4724,7 +4730,8 @@ static void rtl_hw_start_8168dp(struct rtl8169_private *tp) > > rtl_csi_access_enable_1(tp); > > - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > + if (tp->dev->mtu <= ETH_DATA_LEN) > + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > > RTL_W8(MaxTxPacketSize, TxPacketMax); > > @@ -4783,7 +4790,8 @@ static void rtl_hw_start_8168e_1(struct rtl8169_private *tp) > > rtl_ephy_init(ioaddr, e_info_8168e_1, ARRAY_SIZE(e_info_8168e_1)); > > - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > + if (tp->dev->mtu <= ETH_DATA_LEN) > + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > > RTL_W8(MaxTxPacketSize, TxPacketMax); > > @@ -4809,7 +4817,8 @@ static void rtl_hw_start_8168e_2(struct rtl8169_private *tp) > > rtl_ephy_init(ioaddr, e_info_8168e_2, ARRAY_SIZE(e_info_8168e_2)); > > - rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > + if (tp->dev->mtu <= ETH_DATA_LEN) > + rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT); > > rtl_eri_write(ioaddr, 0xc0, ERIAR_MASK_0011, 0x0000, ERIAR_EXGMAC); > rtl_eri_write(ioaddr, 0xb8, ERIAR_MASK_0011, 0x0000, ERIAR_EXGMAC); > -- > 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