igb: Wait 10ms just once after TX queues reset
authorSergey Nemov <sergey.nemov@intel.com>
Fri, 18 May 2018 09:58:40 +0000 (11:58 +0200)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Mon, 4 Jun 2018 17:11:14 +0000 (10:11 -0700)
Move 10ms sleep out of function resetting TX queue.
Reset all the TX queues in one turn and
wait for all of them just once.

Use usleep_range() instead of mdelay() in order not to
affect transmission on other interfaces.

Signed-off-by: Sergey Nemov <sergey.nemov@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/igb/igb_main.c

index 20b728218d2019dd2c9dd14e90da951b7e685cc4..c33821d2afb3fee2f69294d3871631f267e19343 100644 (file)
@@ -4055,11 +4055,6 @@ void igb_configure_tx_ring(struct igb_adapter *adapter,
        u64 tdba = ring->dma;
        int reg_idx = ring->reg_idx;
 
-       /* disable the queue */
-       wr32(E1000_TXDCTL(reg_idx), 0);
-       wrfl();
-       mdelay(10);
-
        wr32(E1000_TDLEN(reg_idx),
             ring->count * sizeof(union e1000_adv_tx_desc));
        wr32(E1000_TDBAL(reg_idx),
@@ -4090,8 +4085,16 @@ void igb_configure_tx_ring(struct igb_adapter *adapter,
  **/
 static void igb_configure_tx(struct igb_adapter *adapter)
 {
+       struct e1000_hw *hw = &adapter->hw;
        int i;
 
+       /* disable the queues */
+       for (i = 0; i < adapter->num_tx_queues; i++)
+               wr32(E1000_TXDCTL(adapter->tx_ring[i]->reg_idx), 0);
+
+       wrfl();
+       usleep_range(10000, 20000);
+
        for (i = 0; i < adapter->num_tx_queues; i++)
                igb_configure_tx_ring(adapter, adapter->tx_ring[i]);
 }