Hi Sakari, [snip] > > > > > fail_stop_pipeline: > > > > > @@ -543,6 +546,8 @@ static void ipu3_vb2_stop_streaming(struct > > > > vb2_queue *vq) > > > > > dev_err(&imgu->pci_dev->dev, > > > > > "failed to stop subdev streaming\n"); > > > > > > > > > > + mutex_lock(&imgu->streaming_lock); > > > > > + > > > > > /* Was this the first node with streaming disabled? */ > > > > > if (imgu->streaming && ipu3_all_nodes_streaming(imgu, node)) { > > > > > /* Yes, really stop streaming now */ @@ -552,6 +557,7 @@ > > > > static > > > > > void ipu3_vb2_stop_streaming(struct vb2_queue *vq) > > > > > imgu->streaming = false; > > > > > } > > > > > > > > > > + mutex_unlock(&imgu->streaming_lock); > > > > > ipu3_return_all_buffers(imgu, node, VB2_BUF_STATE_ERROR); > > > > I'd also call ipu3_return_all_buffers() before releasing the lock: in > > principle the user may have queued new buffers on the devices before > > the driver marks the buffers as faulty. > > Ack (Somehow I missed this comment.) [snip]