Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c47fc8ea authored by Sujeev Dias's avatar Sujeev Dias
Browse files

mhi_bus: core: check event ring before scheduling work



MHI support MSI coalescing, meaning, same MSI vector can
be shared between multiple event rings. So, it's possible
event ring isr handler to get called with no new event. Confirm
there are pending events to process before scheduling work.

CRs-Fixed: 2211328
Change-Id: I696bf421854c728a33a6a34a1d98bfe8c80bb85f
Signed-off-by: default avatarSujeev Dias <sdias@codeaurora.org>
parent 76154d31
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -911,6 +911,15 @@ void mhi_ctrl_ev_task(unsigned long data)
irqreturn_t mhi_msi_handlr(int irq_number, void *dev)
{
	struct mhi_event *mhi_event = dev;
	struct mhi_controller *mhi_cntrl = mhi_event->mhi_cntrl;
	struct mhi_event_ctxt *er_ctxt =
		&mhi_cntrl->mhi_ctxt->er_ctxt[mhi_event->er_index];
	struct mhi_ring *ev_ring = &mhi_event->ring;
	void *dev_rp = mhi_to_virtual(ev_ring, er_ctxt->rp);

	/* confirm ER has pending events to process before scheduling work */
	if (ev_ring->rp == dev_rp)
		return IRQ_HANDLED;

	/* client managed event ring, notify pending data */
	if (mhi_event->cl_manage) {