]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ixgbe: update the rss key on h/w, when ethtool ask for it
authorPaolo Abeni <pabeni@redhat.com>
Thu, 15 Dec 2016 14:20:34 +0000 (15:20 +0100)
committerJack Vogel <jack.vogel@oracle.com>
Fri, 16 Jun 2017 06:01:23 +0000 (23:01 -0700)
Currently ixgbe_set_rxfh() updates the rss_key copy in the driver
memory, but does not push the new value into the h/w. This commit
add a new helper for the latter operation and call it in
ixgbe_set_rxfh(), so that the h/w rss key value can be really
updated via ethtool.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Orabug: 26242766
(cherry picked from commit d3aa9c9f212a729e46653d4c1eb6a9ab190efe3a)
Signed-off-by: Jack Vogel <jack.vogel@oracle.com>
Reviewed-by: Ethan Zhao <ethan.zhao@oracle.com>
drivers/net/ethernet/intel/ixgbe/ixgbe.h
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index d452dbef4df5e44e3482fb851516f641f7d96d9c..fa087fbdfb1199c03f7b8aa167e0ec8bf8f8e1e3 100644 (file)
@@ -912,6 +912,7 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
                                  struct ixgbe_adapter *adapter,
                                  struct ixgbe_ring *tx_ring);
 u32 ixgbe_rss_indir_tbl_entries(struct ixgbe_adapter *adapter);
+void ixgbe_store_key(struct ixgbe_adapter *adapter);
 void ixgbe_store_reta(struct ixgbe_adapter *adapter);
 s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg,
                       u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm);
index 59585437e69740b7d793e358d416ed0816bd71a1..dfa2671499cd6d190e628ae7a677b3b5c9f60057 100644 (file)
@@ -2999,8 +2999,10 @@ static int ixgbe_set_rxfh(struct net_device *netdev, const u32 *indir,
        }
 
        /* Fill out the rss hash key */
-       if (key)
+       if (key) {
                memcpy(adapter->rss_key, key, ixgbe_get_rxfh_key_size(netdev));
+               ixgbe_store_key(adapter);
+       }
 
        ixgbe_store_reta(adapter);
 
index 17b30679c260ea5614ed211756ea4fca24e35f58..c840524dce74a9fc6a590e8147d7f0d82f2fe515 100644 (file)
@@ -3403,6 +3403,21 @@ u32 ixgbe_rss_indir_tbl_entries(struct ixgbe_adapter *adapter)
                return 512;
 }
 
+/**
+ * ixgbe_store_key - Write the RSS key to HW
+ * @adapter: device handle
+ *
+ * Write the RSS key stored in adapter.rss_key to HW.
+ */
+void ixgbe_store_key(struct ixgbe_adapter *adapter)
+{
+       struct ixgbe_hw *hw = &adapter->hw;
+       int i;
+
+       for (i = 0; i < 10; i++)
+               IXGBE_WRITE_REG(hw, IXGBE_RSSRK(i), adapter->rss_key[i]);
+}
+
 /**
  * ixgbe_store_reta - Write the RETA table to HW
  * @adapter: device handle
@@ -3468,7 +3483,6 @@ static void ixgbe_store_vfreta(struct ixgbe_adapter *adapter)
 
 static void ixgbe_setup_reta(struct ixgbe_adapter *adapter)
 {
-       struct ixgbe_hw *hw = &adapter->hw;
        u32 i, j;
        u32 reta_entries = ixgbe_rss_indir_tbl_entries(adapter);
        u16 rss_i = adapter->ring_feature[RING_F_RSS].indices;
@@ -3481,8 +3495,7 @@ static void ixgbe_setup_reta(struct ixgbe_adapter *adapter)
                rss_i = 4;
 
        /* Fill out hash function seeds */
-       for (i = 0; i < 10; i++)
-               IXGBE_WRITE_REG(hw, IXGBE_RSSRK(i), adapter->rss_key[i]);
+       ixgbe_store_key(adapter);
 
        /* Fill out redirection table */
        memset(adapter->rss_indir_tbl, 0, sizeof(adapter->rss_indir_tbl));