From: Sergey Nemov <sergey.ne...@intel.com>

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.ne...@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/igb/igb_main.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/intel/igb/igb_main.c 
b/drivers/net/ethernet/intel/igb/igb_main.c
index 20b728218d20..c33821d2afb3 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -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]);
 }
-- 
2.17.1

Reply via email to