From: Jeff Kirsher
> Sent: 10 October 2017 18:22
> Intel 100/200 Series Chipset platforms reduced the round-trip
> latency for the LAN Controller DMA accesses, causing in some high
> performance cases a buffer overrun while the I219 LAN Connected
> Device is processing the DMA transactions. I219LM and I219V devices
> can fall into unrecovered Tx hang under very stressfully UDP traffic
> and multiple reconnection of Ethernet cable. This Tx hang of the LAN
> Controller is only recovered if the system is rebooted. Slightly slow
> down DMA access by reducing the number of outstanding requests.
> This workaround could have an impact on TCP traffic performance
> on the platform. Disabling TSO eliminates performance loss for TCP
> traffic without a noticeable impact on CPU performance.
> 
> Please, refer to I218/I219 specification update:
> https://www.intel.com/content/www/us/en/embedded/products/networking/
> ethernet-connection-i218-family-documentation.html
> 
> Signed-off-by: Sasha Neftin <sasha.nef...@intel.com>
> Reviewed-by: Dima Ruinskiy <dima.ruins...@intel.com>
> Reviewed-by: Raanan Avargil <raanan.avar...@intel.com>
> Tested-by: Aaron Brown <aaron.f.br...@intel.com>
> Signed-off-by: Jeff Kirsher <jeffrey.t.kirs...@intel.com>
> ---
>  drivers/net/ethernet/intel/e1000e/netdev.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c 
> b/drivers/net/ethernet/intel/e1000e/netdev.c
> index ee9de3500331..14b096f3d1da 100644
> --- a/drivers/net/ethernet/intel/e1000e/netdev.c
> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
> @@ -3021,8 +3021,8 @@ static void e1000_configure_tx(struct e1000_adapter 
> *adapter)
> 
>       hw->mac.ops.config_collision_dist(hw);
> 
> -     /* SPT and CNP Si errata workaround to avoid data corruption */
> -     if (hw->mac.type >= e1000_pch_spt) {
> +     /* SPT and KBL Si errata workaround to avoid data corruption */
> +     if (hw->mac.type == e1000_pch_spt) {
>               u32 reg_val;
> 
>               reg_val = er32(IOSFPC);
> @@ -3030,7 +3030,9 @@ static void e1000_configure_tx(struct e1000_adapter 
> *adapter)
>               ew32(IOSFPC, reg_val);
> 
>               reg_val = er32(TARC(0));
> -             reg_val |= E1000_TARC0_CB_MULTIQ_3_REQ;
> +             /* SPT and KBL Si errata workaround to avoid Tx hang */
> +             reg_val &= ~BIT(28);
> +             reg_val |= BIT(29);

Shouldn't some more of the commit message about what this is doing
be in the comment?
And shouldn't the 28 and 28 be named constants?

>               ew32(TARC(0), reg_val);

        David

Reply via email to