bus: mhi: host: Avoid ringing EV DB if there are no elements to process
authorVivek Pernamitta <quic_vpernami@quicinc.com>
Tue, 4 Apr 2023 09:44:16 +0000 (15:14 +0530)
committerManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Mon, 10 Apr 2023 13:11:38 +0000 (18:41 +0530)
Currently, mhi_process_data_event_ring()/mhi_process_ctrl_ev_ring() APIs
are ringing DB even if there are no ring elements to process. This could
cause the device to process the DB event in the absence of ring elements.
So to avoid this unnecessary device processing, let's ring event DB only
if there are any ring elements to process.

Signed-off-by: Vivek Pernamitta <quic_vpernami@quicinc.com>
Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Link: https://lore.kernel.org/r/1680601458-9105-1-git-send-email-quic_vpernami@quicinc.com
[mani: massaged the commit message a bit]
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
drivers/bus/mhi/host/main.c

index 4fa0969472fcd301c004df3a8857e8ce3ce11c80..c7eb7b8be9d6b57bc53ab3ab07727a90dae80d6e 100644 (file)
@@ -961,7 +961,9 @@ int mhi_process_ctrl_ev_ring(struct mhi_controller *mhi_cntrl,
        }
 
        read_lock_bh(&mhi_cntrl->pm_lock);
-       if (likely(MHI_DB_ACCESS_VALID(mhi_cntrl)))
+
+       /* Ring EV DB only if there is any pending element to process */
+       if (likely(MHI_DB_ACCESS_VALID(mhi_cntrl)) && count)
                mhi_ring_er_db(mhi_event);
        read_unlock_bh(&mhi_cntrl->pm_lock);
 
@@ -1031,7 +1033,9 @@ int mhi_process_data_event_ring(struct mhi_controller *mhi_cntrl,
                count++;
        }
        read_lock_bh(&mhi_cntrl->pm_lock);
-       if (likely(MHI_DB_ACCESS_VALID(mhi_cntrl)))
+
+       /* Ring EV DB only if there is any pending element to process */
+       if (likely(MHI_DB_ACCESS_VALID(mhi_cntrl)) && count)
                mhi_ring_er_db(mhi_event);
        read_unlock_bh(&mhi_cntrl->pm_lock);