ionic: remove missed doorbell per-queue timer
authorShannon Nelson <shannon.nelson@amd.com>
Wed, 19 Jun 2024 00:32:50 +0000 (17:32 -0700)
committerJakub Kicinski <kuba@kernel.org>
Thu, 20 Jun 2024 01:30:54 +0000 (18:30 -0700)
Remove the timer-per-queue mechanics from the missed doorbell
check in preparation for the new missed doorbell fix.

Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
Link: https://lore.kernel.org/r/20240619003257.6138-2-shannon.nelson@amd.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/pensando/ionic/ionic_dev.c
drivers/net/ethernet/pensando/ionic/ionic_lif.c
drivers/net/ethernet/pensando/ionic/ionic_lif.h
drivers/net/ethernet/pensando/ionic/ionic_txrx.c

index 8744993..89b4310 100644 (file)
@@ -703,10 +703,6 @@ void ionic_q_post(struct ionic_queue *q, bool ring_doorbell)
                                 q->dbval | q->head_idx);
 
                q->dbell_jiffies = jiffies;
-
-               if (q_to_qcq(q)->napi_qcq)
-                       mod_timer(&q_to_qcq(q)->napi_qcq->napi_deadline,
-                                 jiffies + IONIC_NAPI_DEADLINE);
        }
 }
 
index b8fdfb3..1f02b32 100644 (file)
@@ -213,13 +213,6 @@ void ionic_link_status_check_request(struct ionic_lif *lif, bool can_sleep)
        }
 }
 
-static void ionic_napi_deadline(struct timer_list *timer)
-{
-       struct ionic_qcq *qcq = container_of(timer, struct ionic_qcq, napi_deadline);
-
-       napi_schedule(&qcq->napi);
-}
-
 static irqreturn_t ionic_isr(int irq, void *data)
 {
        struct napi_struct *napi = data;
@@ -343,7 +336,6 @@ static int ionic_qcq_disable(struct ionic_lif *lif, struct ionic_qcq *qcq, int f
                synchronize_irq(qcq->intr.vector);
                irq_set_affinity_hint(qcq->intr.vector, NULL);
                napi_disable(&qcq->napi);
-               del_timer_sync(&qcq->napi_deadline);
        }
 
        /* If there was a previous fw communcation error, don't bother with
@@ -478,7 +470,6 @@ static void ionic_link_qcq_interrupts(struct ionic_qcq *src_qcq,
 {
        n_qcq->intr.vector = src_qcq->intr.vector;
        n_qcq->intr.index = src_qcq->intr.index;
-       n_qcq->napi_qcq = src_qcq->napi_qcq;
 }
 
 static int ionic_alloc_qcq_interrupt(struct ionic_lif *lif, struct ionic_qcq *qcq)
@@ -832,11 +823,8 @@ static int ionic_lif_txq_init(struct ionic_lif *lif, struct ionic_qcq *qcq)
        q->dbell_deadline = IONIC_TX_DOORBELL_DEADLINE;
        q->dbell_jiffies = jiffies;
 
-       if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state)) {
+       if (test_bit(IONIC_LIF_F_SPLIT_INTR, lif->state))
                netif_napi_add(lif->netdev, &qcq->napi, ionic_tx_napi);
-               qcq->napi_qcq = qcq;
-               timer_setup(&qcq->napi_deadline, ionic_napi_deadline, 0);
-       }
 
        qcq->flags |= IONIC_QCQ_F_INITED;
 
@@ -909,9 +897,6 @@ static int ionic_lif_rxq_init(struct ionic_lif *lif, struct ionic_qcq *qcq)
        else
                netif_napi_add(lif->netdev, &qcq->napi, ionic_txrx_napi);
 
-       qcq->napi_qcq = qcq;
-       timer_setup(&qcq->napi_deadline, ionic_napi_deadline, 0);
-
        qcq->flags |= IONIC_QCQ_F_INITED;
 
        return 0;
@@ -1166,7 +1151,6 @@ static int ionic_adminq_napi(struct napi_struct *napi, int budget)
        struct ionic_dev *idev = &lif->ionic->idev;
        unsigned long irqflags;
        unsigned int flags = 0;
-       bool resched = false;
        int rx_work = 0;
        int tx_work = 0;
        int n_work = 0;
@@ -1203,15 +1187,12 @@ static int ionic_adminq_napi(struct napi_struct *napi, int budget)
                ionic_intr_credits(idev->intr_ctrl, intr->index, credits, flags);
        }
 
-       if (!a_work && ionic_adminq_poke_doorbell(&lif->adminqcq->q))
-               resched = true;
-       if (lif->hwstamp_rxq && !rx_work && ionic_rxq_poke_doorbell(&lif->hwstamp_rxq->q))
-               resched = true;
-       if (lif->hwstamp_txq && !tx_work && ionic_txq_poke_doorbell(&lif->hwstamp_txq->q))
-               resched = true;
-       if (resched)
-               mod_timer(&lif->adminqcq->napi_deadline,
-                         jiffies + IONIC_NAPI_DEADLINE);
+       if (!a_work)
+               ionic_adminq_poke_doorbell(&lif->adminqcq->q);
+       if (lif->hwstamp_rxq && !rx_work)
+               ionic_rxq_poke_doorbell(&lif->hwstamp_rxq->q);
+       if (lif->hwstamp_txq && !tx_work)
+               ionic_txq_poke_doorbell(&lif->hwstamp_txq->q);
 
        return work_done;
 }
@@ -3502,9 +3483,6 @@ static int ionic_lif_adminq_init(struct ionic_lif *lif)
 
        netif_napi_add(lif->netdev, &qcq->napi, ionic_adminq_napi);
 
-       qcq->napi_qcq = qcq;
-       timer_setup(&qcq->napi_deadline, ionic_napi_deadline, 0);
-
        napi_enable(&qcq->napi);
 
        if (qcq->flags & IONIC_QCQ_F_INTR) {
index 08f4266..a029206 100644 (file)
@@ -84,11 +84,9 @@ struct ionic_qcq {
        u32 cmb_pgid;
        u32 cmb_order;
        struct dim dim;
-       struct timer_list napi_deadline;
        struct ionic_queue q;
        struct ionic_cq cq;
        struct napi_struct napi;
-       struct ionic_qcq *napi_qcq;
        struct ionic_intr_info intr;
        struct dentry *dentry;
 };
index 9e6dee2..a4e9233 100644 (file)
@@ -868,9 +868,6 @@ void ionic_rx_fill(struct ionic_queue *q)
 
        q->dbell_deadline = IONIC_RX_MIN_DOORBELL_DEADLINE;
        q->dbell_jiffies = jiffies;
-
-       mod_timer(&q_to_qcq(q)->napi_qcq->napi_deadline,
-                 jiffies + IONIC_NAPI_DEADLINE);
 }
 
 void ionic_rx_empty(struct ionic_queue *q)
@@ -953,8 +950,8 @@ int ionic_tx_napi(struct napi_struct *napi, int budget)
                                   work_done, flags);
        }
 
-       if (!work_done && ionic_txq_poke_doorbell(&qcq->q))
-               mod_timer(&qcq->napi_deadline, jiffies + IONIC_NAPI_DEADLINE);
+       if (!work_done)
+               ionic_txq_poke_doorbell(&qcq->q);
 
        return work_done;
 }
@@ -996,8 +993,8 @@ int ionic_rx_napi(struct napi_struct *napi, int budget)
                                   work_done, flags);
        }
 
-       if (!work_done && ionic_rxq_poke_doorbell(&qcq->q))
-               mod_timer(&qcq->napi_deadline, jiffies + IONIC_NAPI_DEADLINE);
+       if (!work_done)
+               ionic_rxq_poke_doorbell(&qcq->q);
 
        return work_done;
 }
@@ -1010,7 +1007,6 @@ int ionic_txrx_napi(struct napi_struct *napi, int budget)
        struct ionic_qcq *txqcq;
        struct ionic_lif *lif;
        struct ionic_cq *txcq;
-       bool resched = false;
        u32 rx_work_done = 0;
        u32 tx_work_done = 0;
        u32 flags = 0;
@@ -1042,12 +1038,10 @@ int ionic_txrx_napi(struct napi_struct *napi, int budget)
                                   tx_work_done + rx_work_done, flags);
        }
 
-       if (!rx_work_done && ionic_rxq_poke_doorbell(&rxqcq->q))
-               resched = true;
-       if (!tx_work_done && ionic_txq_poke_doorbell(&txqcq->q))
-               resched = true;
-       if (resched)
-               mod_timer(&rxqcq->napi_deadline, jiffies + IONIC_NAPI_DEADLINE);
+       if (!rx_work_done)
+               ionic_rxq_poke_doorbell(&rxqcq->q);
+       if (!tx_work_done)
+               ionic_txq_poke_doorbell(&txqcq->q);
 
        return rx_work_done;
 }