aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2017-03-03 12:29:49 -0500
committerDavid S. Miller <davem@davemloft.net>2017-03-03 12:29:49 -0500
commitf7bb3d86a64775e0a7636d211dbd80cbeea6e618 (patch)
tree2864bbb21382a2b2a10882e4614272d8df1ea7d4
parent9f674e48c13dcbc31ac903433727837795b81efe (diff)
parentc74042f3b3ca982652af99cad85252a2655c6064 (diff)
Merge branch '10GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-queue
Jeff Kirsher says: ==================== Intel Wired LAN Driver Updates 2017-03-02 This series contains fixes to ixgbe only. Paolo fixes the driver so that you can actually update the RSS key value via ethtool. Alex fixes an issue on architectures that have a cache line size larger than 64 Bytes, where the amount of headroom for the frame starts shrinking. To take this into account, Alex adds one small check so that we compare the max_frame to the amount of actual data we can store, so we will automatically enable 3K receive buffers as soon as the maximum frame size we can handle drops below the standard Ethernet MTU. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe.h3
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c4
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c22
3 files changed, 23 insertions, 6 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index a2cc43d28888..b1ecc2627a5a 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -96,7 +96,7 @@
96#define IXGBE_MAX_FRAME_BUILD_SKB \ 96#define IXGBE_MAX_FRAME_BUILD_SKB \
97 (SKB_WITH_OVERHEAD(IXGBE_RXBUFFER_2K) - IXGBE_SKB_PAD) 97 (SKB_WITH_OVERHEAD(IXGBE_RXBUFFER_2K) - IXGBE_SKB_PAD)
98#else 98#else
99#define IGB_MAX_FRAME_BUILD_SKB IXGBE_RXBUFFER_2K 99#define IXGBE_MAX_FRAME_BUILD_SKB IXGBE_RXBUFFER_2K
100#endif 100#endif
101 101
102/* 102/*
@@ -929,6 +929,7 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
929 struct ixgbe_adapter *adapter, 929 struct ixgbe_adapter *adapter,
930 struct ixgbe_ring *tx_ring); 930 struct ixgbe_ring *tx_ring);
931u32 ixgbe_rss_indir_tbl_entries(struct ixgbe_adapter *adapter); 931u32 ixgbe_rss_indir_tbl_entries(struct ixgbe_adapter *adapter);
932void ixgbe_store_key(struct ixgbe_adapter *adapter);
932void ixgbe_store_reta(struct ixgbe_adapter *adapter); 933void ixgbe_store_reta(struct ixgbe_adapter *adapter);
933s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg, 934s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg,
934 u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm); 935 u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm);
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
index a7574c7b12af..90fa5bf23d1b 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
@@ -2998,8 +2998,10 @@ static int ixgbe_set_rxfh(struct net_device *netdev, const u32 *indir,
2998 } 2998 }
2999 2999
3000 /* Fill out the rss hash key */ 3000 /* Fill out the rss hash key */
3001 if (key) 3001 if (key) {
3002 memcpy(adapter->rss_key, key, ixgbe_get_rxfh_key_size(netdev)); 3002 memcpy(adapter->rss_key, key, ixgbe_get_rxfh_key_size(netdev));
3003 ixgbe_store_key(adapter);
3004 }
3003 3005
3004 ixgbe_store_reta(adapter); 3006 ixgbe_store_reta(adapter);
3005 3007
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 060cdce8058f..a7a430a7be2c 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -3474,6 +3474,21 @@ u32 ixgbe_rss_indir_tbl_entries(struct ixgbe_adapter *adapter)
3474} 3474}
3475 3475
3476/** 3476/**
3477 * ixgbe_store_key - Write the RSS key to HW
3478 * @adapter: device handle
3479 *
3480 * Write the RSS key stored in adapter.rss_key to HW.
3481 */
3482void ixgbe_store_key(struct ixgbe_adapter *adapter)
3483{
3484 struct ixgbe_hw *hw = &adapter->hw;
3485 int i;
3486
3487 for (i = 0; i < 10; i++)
3488 IXGBE_WRITE_REG(hw, IXGBE_RSSRK(i), adapter->rss_key[i]);
3489}
3490
3491/**
3477 * ixgbe_store_reta - Write the RETA table to HW 3492 * ixgbe_store_reta - Write the RETA table to HW
3478 * @adapter: device handle 3493 * @adapter: device handle
3479 * 3494 *
@@ -3538,7 +3553,6 @@ static void ixgbe_store_vfreta(struct ixgbe_adapter *adapter)
3538 3553
3539static void ixgbe_setup_reta(struct ixgbe_adapter *adapter) 3554static void ixgbe_setup_reta(struct ixgbe_adapter *adapter)
3540{ 3555{
3541 struct ixgbe_hw *hw = &adapter->hw;
3542 u32 i, j; 3556 u32 i, j;
3543 u32 reta_entries = ixgbe_rss_indir_tbl_entries(adapter); 3557 u32 reta_entries = ixgbe_rss_indir_tbl_entries(adapter);
3544 u16 rss_i = adapter->ring_feature[RING_F_RSS].indices; 3558 u16 rss_i = adapter->ring_feature[RING_F_RSS].indices;
@@ -3551,8 +3565,7 @@ static void ixgbe_setup_reta(struct ixgbe_adapter *adapter)
3551 rss_i = 4; 3565 rss_i = 4;
3552 3566
3553 /* Fill out hash function seeds */ 3567 /* Fill out hash function seeds */
3554 for (i = 0; i < 10; i++) 3568 ixgbe_store_key(adapter);
3555 IXGBE_WRITE_REG(hw, IXGBE_RSSRK(i), adapter->rss_key[i]);
3556 3569
3557 /* Fill out redirection table */ 3570 /* Fill out redirection table */
3558 memset(adapter->rss_indir_tbl, 0, sizeof(adapter->rss_indir_tbl)); 3571 memset(adapter->rss_indir_tbl, 0, sizeof(adapter->rss_indir_tbl));
@@ -3959,7 +3972,8 @@ static void ixgbe_set_rx_buffer_len(struct ixgbe_adapter *adapter)
3959 if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) 3972 if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED)
3960 set_bit(__IXGBE_RX_3K_BUFFER, &rx_ring->state); 3973 set_bit(__IXGBE_RX_3K_BUFFER, &rx_ring->state);
3961 3974
3962 if (max_frame > (ETH_FRAME_LEN + ETH_FCS_LEN)) 3975 if ((max_frame > (ETH_FRAME_LEN + ETH_FCS_LEN)) ||
3976 (max_frame > IXGBE_MAX_FRAME_BUILD_SKB))
3963 set_bit(__IXGBE_RX_3K_BUFFER, &rx_ring->state); 3977 set_bit(__IXGBE_RX_3K_BUFFER, &rx_ring->state);
3964#endif 3978#endif
3965 } 3979 }