aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ixgbe/ixgbe_main.c
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2009-05-17 16:57:47 -0400
committerDavid S. Miller <davem@davemloft.net>2009-05-18 18:09:43 -0400
commite76678dd654545c98a5d0bdc66bd41350573c23e (patch)
tree86e4ff745d686f82353c460542e321ba0b09cbc0 /drivers/net/ixgbe/ixgbe_main.c
parent82d048186e403f36e083b37ad42aa90abb7dcaac (diff)
ixgbe: set max desc to prevent total RSC packet size of 64K
The performance of hardware RSC is greatly reduced if the total for max rsc descriptors multiplied by the buffer size is greater than 65535. To prevent this we need to adjust the max rsc descriptors appropriately. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ixgbe/ixgbe_main.c')
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index b53f26501173..4ab17ab7fbce 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -1995,21 +1995,28 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
1995 rscctrl = IXGBE_READ_REG(hw, IXGBE_RSCCTL(j)); 1995 rscctrl = IXGBE_READ_REG(hw, IXGBE_RSCCTL(j));
1996 rscctrl |= IXGBE_RSCCTL_RSCEN; 1996 rscctrl |= IXGBE_RSCCTL_RSCEN;
1997 /* 1997 /*
1998 * if packet split is enabled we can only support up 1998 * we must limit the number of descriptors so that the
1999 * to max frags + 1 descriptors. 1999 * total size of max desc * buf_len is not greater
2000 * than 65535
2000 */ 2001 */
2001 if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) 2002 if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) {
2002#if (MAX_SKB_FRAGS < 3) 2003#if (MAX_SKB_FRAGS > 16)
2003 rscctrl |= IXGBE_RSCCTL_MAXDESC_1; 2004 rscctrl |= IXGBE_RSCCTL_MAXDESC_16;
2004#elif (MAX_SKB_FRAGS < 7) 2005#elif (MAX_SKB_FRAGS > 8)
2005 rscctrl |= IXGBE_RSCCTL_MAXDESC_4;
2006#elif (MAX_SKB_FRAGS < 15)
2007 rscctrl |= IXGBE_RSCCTL_MAXDESC_8; 2006 rscctrl |= IXGBE_RSCCTL_MAXDESC_8;
2007#elif (MAX_SKB_FRAGS > 4)
2008 rscctrl |= IXGBE_RSCCTL_MAXDESC_4;
2008#else 2009#else
2009 rscctrl |= IXGBE_RSCCTL_MAXDESC_16; 2010 rscctrl |= IXGBE_RSCCTL_MAXDESC_1;
2010#endif 2011#endif
2011 else 2012 } else {
2012 rscctrl |= IXGBE_RSCCTL_MAXDESC_16; 2013 if (rx_buf_len < IXGBE_RXBUFFER_4096)
2014 rscctrl |= IXGBE_RSCCTL_MAXDESC_16;
2015 else if (rx_buf_len < IXGBE_RXBUFFER_8192)
2016 rscctrl |= IXGBE_RSCCTL_MAXDESC_8;
2017 else
2018 rscctrl |= IXGBE_RSCCTL_MAXDESC_4;
2019 }
2013 IXGBE_WRITE_REG(hw, IXGBE_RSCCTL(j), rscctrl); 2020 IXGBE_WRITE_REG(hw, IXGBE_RSCCTL(j), rscctrl);
2014 } 2021 }
2015 /* Disable RSC for ACK packets */ 2022 /* Disable RSC for ACK packets */