Commit 4aaa49a2 authored by Shannon Nelson's avatar Shannon Nelson Committed by Jakub Kicinski

ionic: remove missed doorbell per-queue timer

Remove the timer-per-queue mechanics from the missed doorbell
check in preparation for the new missed doorbell fix.
Signed-off-by: default avatarShannon Nelson <shannon.nelson@amd.com>
Link: https://lore.kernel.org/r/20240619003257.6138-2-shannon.nelson@amd.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 6f80fcdf
...@@ -703,10 +703,6 @@ void ionic_q_post(struct ionic_queue *q, bool ring_doorbell) ...@@ -703,10 +703,6 @@ void ionic_q_post(struct ionic_queue *q, bool ring_doorbell)
q->dbval | q->head_idx); q->dbval | q->head_idx);
q->dbell_jiffies = jiffies; 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);
} }
} }
......
...@@ -213,13 +213,6 @@ void ionic_link_status_check_request(struct ionic_lif *lif, bool can_sleep) ...@@ -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) static irqreturn_t ionic_isr(int irq, void *data)
{ {
struct napi_struct *napi = 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 ...@@ -343,7 +336,6 @@ static int ionic_qcq_disable(struct ionic_lif *lif, struct ionic_qcq *qcq, int f
synchronize_irq(qcq->intr.vector); synchronize_irq(qcq->intr.vector);
irq_set_affinity_hint(qcq->intr.vector, NULL); irq_set_affinity_hint(qcq->intr.vector, NULL);
napi_disable(&qcq->napi); napi_disable(&qcq->napi);
del_timer_sync(&qcq->napi_deadline);
} }
/* If there was a previous fw communcation error, don't bother with /* 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, ...@@ -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.vector = src_qcq->intr.vector;
n_qcq->intr.index = src_qcq->intr.index; 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) 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) ...@@ -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_deadline = IONIC_TX_DOORBELL_DEADLINE;
q->dbell_jiffies = jiffies; 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); 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; qcq->flags |= IONIC_QCQ_F_INITED;
...@@ -909,9 +897,6 @@ static int ionic_lif_rxq_init(struct ionic_lif *lif, struct ionic_qcq *qcq) ...@@ -909,9 +897,6 @@ static int ionic_lif_rxq_init(struct ionic_lif *lif, struct ionic_qcq *qcq)
else else
netif_napi_add(lif->netdev, &qcq->napi, ionic_txrx_napi); 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; qcq->flags |= IONIC_QCQ_F_INITED;
return 0; return 0;
...@@ -1166,7 +1151,6 @@ static int ionic_adminq_napi(struct napi_struct *napi, int budget) ...@@ -1166,7 +1151,6 @@ static int ionic_adminq_napi(struct napi_struct *napi, int budget)
struct ionic_dev *idev = &lif->ionic->idev; struct ionic_dev *idev = &lif->ionic->idev;
unsigned long irqflags; unsigned long irqflags;
unsigned int flags = 0; unsigned int flags = 0;
bool resched = false;
int rx_work = 0; int rx_work = 0;
int tx_work = 0; int tx_work = 0;
int n_work = 0; int n_work = 0;
...@@ -1203,15 +1187,12 @@ static int ionic_adminq_napi(struct napi_struct *napi, int budget) ...@@ -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); ionic_intr_credits(idev->intr_ctrl, intr->index, credits, flags);
} }
if (!a_work && ionic_adminq_poke_doorbell(&lif->adminqcq->q)) if (!a_work)
resched = true; ionic_adminq_poke_doorbell(&lif->adminqcq->q);
if (lif->hwstamp_rxq && !rx_work && ionic_rxq_poke_doorbell(&lif->hwstamp_rxq->q)) if (lif->hwstamp_rxq && !rx_work)
resched = true; ionic_rxq_poke_doorbell(&lif->hwstamp_rxq->q);
if (lif->hwstamp_txq && !tx_work && ionic_txq_poke_doorbell(&lif->hwstamp_txq->q)) if (lif->hwstamp_txq && !tx_work)
resched = true; ionic_txq_poke_doorbell(&lif->hwstamp_txq->q);
if (resched)
mod_timer(&lif->adminqcq->napi_deadline,
jiffies + IONIC_NAPI_DEADLINE);
return work_done; return work_done;
} }
...@@ -3502,9 +3483,6 @@ static int ionic_lif_adminq_init(struct ionic_lif *lif) ...@@ -3502,9 +3483,6 @@ static int ionic_lif_adminq_init(struct ionic_lif *lif)
netif_napi_add(lif->netdev, &qcq->napi, ionic_adminq_napi); 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); napi_enable(&qcq->napi);
if (qcq->flags & IONIC_QCQ_F_INTR) { if (qcq->flags & IONIC_QCQ_F_INTR) {
......
...@@ -84,11 +84,9 @@ struct ionic_qcq { ...@@ -84,11 +84,9 @@ struct ionic_qcq {
u32 cmb_pgid; u32 cmb_pgid;
u32 cmb_order; u32 cmb_order;
struct dim dim; struct dim dim;
struct timer_list napi_deadline;
struct ionic_queue q; struct ionic_queue q;
struct ionic_cq cq; struct ionic_cq cq;
struct napi_struct napi; struct napi_struct napi;
struct ionic_qcq *napi_qcq;
struct ionic_intr_info intr; struct ionic_intr_info intr;
struct dentry *dentry; struct dentry *dentry;
}; };
......
...@@ -868,9 +868,6 @@ void ionic_rx_fill(struct ionic_queue *q) ...@@ -868,9 +868,6 @@ void ionic_rx_fill(struct ionic_queue *q)
q->dbell_deadline = IONIC_RX_MIN_DOORBELL_DEADLINE; q->dbell_deadline = IONIC_RX_MIN_DOORBELL_DEADLINE;
q->dbell_jiffies = jiffies; 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) void ionic_rx_empty(struct ionic_queue *q)
...@@ -953,8 +950,8 @@ int ionic_tx_napi(struct napi_struct *napi, int budget) ...@@ -953,8 +950,8 @@ int ionic_tx_napi(struct napi_struct *napi, int budget)
work_done, flags); work_done, flags);
} }
if (!work_done && ionic_txq_poke_doorbell(&qcq->q)) if (!work_done)
mod_timer(&qcq->napi_deadline, jiffies + IONIC_NAPI_DEADLINE); ionic_txq_poke_doorbell(&qcq->q);
return work_done; return work_done;
} }
...@@ -996,8 +993,8 @@ int ionic_rx_napi(struct napi_struct *napi, int budget) ...@@ -996,8 +993,8 @@ int ionic_rx_napi(struct napi_struct *napi, int budget)
work_done, flags); work_done, flags);
} }
if (!work_done && ionic_rxq_poke_doorbell(&qcq->q)) if (!work_done)
mod_timer(&qcq->napi_deadline, jiffies + IONIC_NAPI_DEADLINE); ionic_rxq_poke_doorbell(&qcq->q);
return work_done; return work_done;
} }
...@@ -1010,7 +1007,6 @@ int ionic_txrx_napi(struct napi_struct *napi, int budget) ...@@ -1010,7 +1007,6 @@ int ionic_txrx_napi(struct napi_struct *napi, int budget)
struct ionic_qcq *txqcq; struct ionic_qcq *txqcq;
struct ionic_lif *lif; struct ionic_lif *lif;
struct ionic_cq *txcq; struct ionic_cq *txcq;
bool resched = false;
u32 rx_work_done = 0; u32 rx_work_done = 0;
u32 tx_work_done = 0; u32 tx_work_done = 0;
u32 flags = 0; u32 flags = 0;
...@@ -1042,12 +1038,10 @@ int ionic_txrx_napi(struct napi_struct *napi, int budget) ...@@ -1042,12 +1038,10 @@ int ionic_txrx_napi(struct napi_struct *napi, int budget)
tx_work_done + rx_work_done, flags); tx_work_done + rx_work_done, flags);
} }
if (!rx_work_done && ionic_rxq_poke_doorbell(&rxqcq->q)) if (!rx_work_done)
resched = true; ionic_rxq_poke_doorbell(&rxqcq->q);
if (!tx_work_done && ionic_txq_poke_doorbell(&txqcq->q)) if (!tx_work_done)
resched = true; ionic_txq_poke_doorbell(&txqcq->q);
if (resched)
mod_timer(&rxqcq->napi_deadline, jiffies + IONIC_NAPI_DEADLINE);
return rx_work_done; return rx_work_done;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment