]> rtime.felk.cvut.cz Git - zynq/linux.git/commitdiff
v4l: xilinx: dma: Terminate DMA when media pipeline fails to start
authorVishal Sagar <vishal.sagar@xilinx.com>
Wed, 2 May 2018 12:38:44 +0000 (18:08 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Thu, 3 May 2018 05:54:04 +0000 (07:54 +0200)
If an incorrectly configured media pipeline is started, the allocated
dma descriptors aren't freed. This leads to kernel oops when pipeline
is configured correctly and run subsequently. This patch fixes this
issue by freeing the descriptors on media pipeline start failure.

Signed-off-by: Vishal Sagar <vishal.sagar@xilinx.com>
Tested-by: Anil Kumar Mamidala <amamidal@xilinx.com>
Reviewed-by: Hyun Kwon <hyun.kwon@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
drivers/media/platform/xilinx/xilinx-dma.c

index 4a5f2d8119d36ae6678070a8f26d88990580f9c3..a4860a70f8275dff63152e257e78d85abc6a2f1f 100644 (file)
@@ -613,10 +613,10 @@ static int xvip_dma_start_streaming(struct vb2_queue *vq, unsigned int count)
        return 0;
 
 error_stop:
-       dmaengine_terminate_all(dma->dma);
        media_pipeline_stop(&dma->video.entity);
 
 error:
+       dmaengine_terminate_all(dma->dma);
        /* Give back all queued buffers to videobuf2. */
        spin_lock_irq(&dma->queued_lock);
        list_for_each_entry_safe(buf, nbuf, &dma->queued_bufs, queue) {