On Fri, May 10, 2013 at 12:55:12AM +0200, Francois Romieu wrote:
> From: Tomi Orava <[email protected]>
> 
> 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 <[email protected]>
> Signed-off-by: Francois Romieu <[email protected]>
> Cc: Hayes Wang <[email protected]>
> Signed-off-by: David S. Miller <[email protected]>
> ---
>  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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to