Robert Jarzmik <robert.jarzmik@xxxxxxx> writes: > Guennadi Liakhovetski <g.liakhovetski@xxxxxx> writes: > >>> + for (i = 0; i < pcdev->channels; i++) { >>> + pcdev->sg_tail[i] = buf->dmas[i].sg_cpu + buf->dmas[i].sglen; >>> + pcdev->sg_tail[i]->ddadr = DDADR_STOP; > >> This function is now called "live" with running DMA, and you first append >> the chain, and only then terminate it... It should be ok because it is >> done with switched off IRQs, and DMA must be still at tail - 1 to >> automatically continue onto the appended chain, so, you should have enough >> time in 100% of cases, still it would look better to first terminate the >> chain and then append it. > Correct. I'll invert the 2 assignments. At second thought, I think I'll change this. The first assignment doesn't append the chain, it just moves where sg_tail points at. The "chain append" was previously done in "pxa_dma_add_tail_buf". So the correct thing to do is to displace the "DDADR_STOP" assignment into "pxa_dma_add_tail_buf", to make the "STOP" on the last descriptor of the newest tail buffer. This "STOP" should be set up _before_ the buffer is queued. I'll amend that. Cheers. -- Robert -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html