net/ionic: stop queues when LIF is stopped
authorAndrew Boyer <aboyer@pensando.io>
Wed, 16 Dec 2020 21:12:57 +0000 (13:12 -0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 13 Jan 2021 17:51:58 +0000 (18:51 +0100)
Otherwise they cannot be restarted, because the FW will reject INIT
or ENA commands on queues which are already running.

Signed-off-by: Andrew Boyer <aboyer@pensando.io>
drivers/net/ionic/ionic_lif.c

index c1a95ca..3e643d1 100644 (file)
@@ -66,9 +66,23 @@ ionic_qcq_disable(struct ionic_qcq *qcq)
 void
 ionic_lif_stop(struct ionic_lif *lif)
 {
+       uint32_t i;
+
        IONIC_PRINT_CALL();
 
        lif->state &= ~IONIC_LIF_F_UP;
+
+       for (i = 0; i < lif->nrxqcqs; i++) {
+               struct ionic_qcq *rxq = lif->rxqcqs[i];
+               if (rxq->flags & IONIC_QCQ_F_INITED)
+                       (void)ionic_dev_rx_queue_stop(lif->eth_dev, i);
+       }
+
+       for (i = 0; i < lif->ntxqcqs; i++) {
+               struct ionic_qcq *txq = lif->txqcqs[i];
+               if (txq->flags & IONIC_QCQ_F_INITED)
+                       (void)ionic_dev_tx_queue_stop(lif->eth_dev, i);
+       }
 }
 
 void