pds_core: Unmask adminq interrupt in work thread
authorBrett Creeley <brett.creeley@amd.com>
Fri, 2 Feb 2024 19:59:09 +0000 (11:59 -0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 6 Feb 2024 12:26:54 +0000 (13:26 +0100)
Unmasking the interrupt during the pdsc_adminq_isr
is a bit early and could cause unnecessary interrupts.
Instead always unmask after processing the adminq
and notifyq in pdsc_work_thread()->pdsc_process_adminq().
Also, since we are always unmasking, there's no need
for the local credits variable in pdsc_process_adminq().

Signed-off-by: Brett Creeley <brett.creeley@amd.com>
Reviewed-by: Shannon Nelson <shannon.nelson@amd.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/amd/pds_core/adminq.c

index ea773cf..c83a0a8 100644 (file)
@@ -82,7 +82,6 @@ void pdsc_process_adminq(struct pdsc_qcq *qcq)
        unsigned long irqflags;
        int nq_work = 0;
        int aq_work = 0;
-       int credits;
 
        /* Don't process AdminQ when it's not up */
        if (!pdsc_adminq_inc_if_up(pdsc)) {
@@ -128,11 +127,9 @@ void pdsc_process_adminq(struct pdsc_qcq *qcq)
 
 credits:
        /* Return the interrupt credits, one for each completion */
-       credits = nq_work + aq_work;
-       if (credits)
-               pds_core_intr_credits(&pdsc->intr_ctrl[qcq->intx],
-                                     credits,
-                                     PDS_CORE_INTR_CRED_REARM);
+       pds_core_intr_credits(&pdsc->intr_ctrl[qcq->intx],
+                             nq_work + aq_work,
+                             PDS_CORE_INTR_CRED_REARM);
        refcount_dec(&pdsc->adminq_refcnt);
 }
 
@@ -157,7 +154,6 @@ irqreturn_t pdsc_adminq_isr(int irq, void *data)
 
        qcq = &pdsc->adminqcq;
        queue_work(pdsc->wq, &qcq->work);
-       pds_core_intr_mask(&pdsc->intr_ctrl[qcq->intx], PDS_CORE_INTR_MASK_CLEAR);
        refcount_dec(&pdsc->adminq_refcnt);
 
        return IRQ_HANDLED;