On Thu, Aug 18, 2016 at 4:08 AM, Hsin-Yu Chao <hychao@xxxxxxxxxxxx> wrote: > > A descrptor of status BUSY could stay in pending list with non-zero > number of transferred count. In this case we should query the actual > transfered count or the total residual will be wrong and cause > unexpected hw_ptr move. > > Signed-off-by: Hsin-Yu Chao <hychao@xxxxxxxxxxxx> > --- > drivers/dma/pl330.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c > index 4fc3ffb..39230d9 100644 > --- a/drivers/dma/pl330.c > +++ b/drivers/dma/pl330.c > @@ -2295,7 +2295,7 @@ pl330_tx_status(struct dma_chan *chan, dma_cookie_t cookie, > list_for_each_entry(desc, &pch->work_list, node) { > if (desc->status == DONE) > transferred = desc->bytes_requested; > - else if (running && desc == running) > + else if ((running && desc == running) || (desc->status == BUSY)) This doesn't do quite what we want, pl330_get_current_xferred_count is valid against the current running transfer only. In the case that there's a BUSY desc in the work queue that hasn't been started yet, or has already finished, we're going to get an invalid result since the source address won't match what is in the desc. > transferred = > pl330_get_current_xferred_count(pch, desc); > else > -- > 2.6.6 > -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html