Re: [PATCH] PCI: epf-mhi: return 0 on success instead of positive jiffies

Daniel Hodges <[email protected]> Mon, 2 Mar 2026 09:59:46 -0500
Newsgroups dev.linux.lists.mhi,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci,org.kernel.vger.stable
Message-ID <nedv4u2zt6logpxggnpyuuj6ad23w5kbkfmke6cvh3gfz4zetx@u2z2ivn6xwve>
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: [email protected]
> > > Signed-off-by: Daniel Hodges <[email protected]>
> > 
> > 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