qede: Register l2 queues with doorbell overflow recovery mechanism
authorAriel Elior <Ariel.Elior@cavium.com>
Wed, 28 Nov 2018 16:16:07 +0000 (18:16 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 30 Nov 2018 21:45:13 +0000 (13:45 -0800)
All L2 queues funnel through this flow, so this would cover the
regular RSS queues, as well queues created for VFs, mqos queues,
xdp queues, etc.

Signed-off-by: Ariel Elior <Ariel.Elior@cavium.com>
Signed-off-by: Michal Kalderon <Michal.Kalderon@cavium.com>
Signed-off-by: Tomer Tayar <Tomer.Tayar@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qede/qede_main.c

index efbb4f3..5a74fcb 100644 (file)
@@ -1774,6 +1774,10 @@ static int qede_drain_txq(struct qede_dev *edev,
 static int qede_stop_txq(struct qede_dev *edev,
                         struct qede_tx_queue *txq, int rss_id)
 {
+       /* delete doorbell from doorbell recovery mechanism */
+       edev->ops->common->db_recovery_del(edev->cdev, txq->doorbell_addr,
+                                          &txq->tx_db);
+
        return edev->ops->q_tx_stop(edev->cdev, rss_id, txq->handle);
 }
 
@@ -1910,6 +1914,11 @@ static int qede_start_txq(struct qede_dev *edev,
                  DQ_XCM_ETH_TX_BD_PROD_CMD);
        txq->tx_db.data.agg_flags = DQ_XCM_ETH_DQ_CF_CMD;
 
+       /* register doorbell with doorbell recovery mechanism */
+       rc = edev->ops->common->db_recovery_add(edev->cdev, txq->doorbell_addr,
+                                               &txq->tx_db, DB_REC_WIDTH_32B,
+                                               DB_REC_KERNEL);
+
        return rc;
 }