On 3 May 2012 20:44, Vinod Koul <vinod.koul@xxxxxxxxxxxxxxx> wrote: > On Thu, 2012-05-03 at 17:50 -0700, Thomas Abraham wrote: >> The cookie of completed transfer descriptors are marked as zero. In case of >> cyclic transfers, a new cookie needs to be assigned to the transfer descriptors >> which are picked up from the work_list list before they are re-enabled for >> transfer. This prevents hitting BUG_ON in dma_cookie_complete function when >> transfer descriptors are recycled from the work_list list. >> >> Signed-off-by: Thomas Abraham <thomas.abraham@xxxxxxxxxx> >> --- >> drivers/dma/pl330.c | 1 + >> 1 files changed, 1 insertions(+), 0 deletions(-) >> >> diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c >> index 2ee6e23..7f8f422 100644 >> --- a/drivers/dma/pl330.c >> +++ b/drivers/dma/pl330.c >> @@ -2265,6 +2265,7 @@ static inline void handle_cyclic_desc_list(struct list_head *list) >> dma_async_tx_callback callback; >> >> /* Change status to reload it */ >> + dma_cookie_assign(&desc->txd); >> desc->status = PREP; >> pch = desc->pchan; >> callback = desc->txd.callback; > Nope, this doesn't seem correct to me for two reasons: > 1. client doesnt know this new descriptor, so how will it keep track > 2. What does marking cyclic descriptor complete mean... Nothing IMO > > So it is better *NOT* to mark the descriptor complete. > And below is a better fix this for you, Please test. Ok. > > ---------- > > diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c > index 2ee6e23..fa3fb21 100644 > --- a/drivers/dma/pl330.c > +++ b/drivers/dma/pl330.c > @@ -2322,7 +2322,8 @@ static void pl330_tasklet(unsigned long data) > /* Pick up ripe tomatoes */ > list_for_each_entry_safe(desc, _dt, &pch->work_list, node) > if (desc->status == DONE) { > - dma_cookie_complete(&desc->txd); > + if (pch->cyclic) > + dma_cookie_complete(&desc->txd); > list_move_tail(&desc->node, &list); > } > > > -- > ~Vinod > I have tested this patch. You can add: Tested-by: Thomas Abraham <thomas.abraham@xxxxxxxxxx> Thanks, Thomas. -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html