Re: [PATCH] PCI: epf-mhi: return 0 on success instead of positive jiffies
From: Daniel Hodges
Date: Mon Mar 02 2026 - 10:06:01 EST
On Mon, Mar 02, 2026 at 11:24:23AM +0530, Manivannan Sadhasivam wrote:
> On Fri, Feb 27, 2026 at 01:15:10PM -0600, Bjorn Helgaas wrote:
> > On Fri, Feb 06, 2026 at 03:05:29PM -0500, Daniel Hodges wrote:
> > > wait_for_completion_timeout() returns the number of jiffies remaining
> > > on success (positive value) or 0 on timeout. The pci_epf_mhi_edma_read()
> > > and pci_epf_mhi_edma_write() functions use the return value directly as
> > > their own return value, only converting timeout (0) to -ETIMEDOUT.
> > >
> > > On success, they return the positive jiffies value. The callers in
> > > drivers/bus/mhi/ep/ring.c check for errors with "if (ret < 0)" for
> > > read_sync and "if (ret)" for write_sync. This causes write_sync success
> > > cases to be incorrectly treated as errors since the positive jiffies
> > > value is non-zero.
> > >
> > > Fix by setting ret to 0 when wait_for_completion_timeout() succeeds.
> > >
> > > Fixes: 7b99aaaddabb ("PCI: epf-mhi: Add eDMA support")
> > > Cc: stable@xxxxxxxxxxxxxxx
> > > Signed-off-by: Daniel Hodges <git@xxxxxxxxxxxxxxxx>
> >
> > Thanks for the patch!
> >
> > Two questions: first, is there any reason why __mhi_ep_cache_ring()
> > tests for "ret < 0" but mhi_ep_ring_add_element() tests for "ret"
> > (non-zero)? Could/should they both test just for non-zero, which I
> > think is the typical style?
> >
>
> Yes, agree. I've sent a patch to fix this. Thanks for spotting!
>
> > Second, the subject and commit log are perfectly correct but basically
> > at the level of describing the C code. I propose something along
> > these lines:
> >
> > PCI: epf-mhi: Return 0, not remaining timeout, when eDMA ops complete
> >
> > pci_epf_mhi_edma_read() and pci_epf_mhi_edma_write() start DMA
> > operations and wait for completion with a timeout.
> >
> > On successful completion, they previously returned the remaining
> > timeout, which callers may treat as an error. In particular,
> > mhi_ep_ring_add_element(), which calls pci_epf_mhi_edma_write() via
> > mhi_cntrl->write_sync(), interprets any non-zero return value as
> > failure.
> >
> > Return 0 on success instead of the remaining timeout to prevent
> > mhi_ep_ring_add_element() from treating successful completion as an
> > error.
> >
>
> Ammended the commit with the above, thanks!
>
> - Mani
Thanks for cleaning up! I meant to get around to this, but got a little
distracted with some other things.
-Daniel