On 22-09-23, 18:20, Miquel Raynal wrote: > @@ -583,7 +690,36 @@ static int xdma_alloc_chan_resources(struct dma_chan *chan) > static enum dma_status xdma_tx_status(struct dma_chan *chan, dma_cookie_t cookie, > struct dma_tx_state *state) > { > - return dma_cookie_status(chan, cookie, state); > + struct xdma_chan *xdma_chan = to_xdma_chan(chan); > + struct xdma_desc *desc = NULL; > + struct virt_dma_desc *vd; > + enum dma_status ret; > + unsigned long flags; > + unsigned int period_idx; > + u32 residue = 0; > + > + ret = dma_cookie_status(chan, cookie, state); > + if (ret == DMA_COMPLETE) > + return ret; > + > + spin_lock_irqsave(&xdma_chan->vchan.lock, flags); > + > + vd = vchan_find_desc(&xdma_chan->vchan, cookie); > + if (vd) > + desc = to_xdma_desc(vd); vd is not used in below check, so should be done after below checks, why do this for cyclic case? Otherwise series lgtm, just fix the error reported by test bot > + if (!desc || !desc->cyclic) { > + spin_unlock_irqrestore(&xdma_chan->vchan.lock, flags); > + return ret; > + } -- ~Vinod