On 11/3/19 10:17 PM, John Hubbard wrote:
> After DMA is complete, and the device and CPU caches are synchronized,
> it's still required to mark the CPU pages as dirty, if the data was
> coming from the device. However, this driver was just issuing a
> bare put_page() call, without any set_page_dirty*() call.
> 
> Fix the problem, by calling set_page_dirty_lock() if the CPU pages
> were potentially receiving data from the device.
> 
> Cc: Mauro Carvalho Chehab <mche...@kernel.org>
> Signed-off-by: John Hubbard <jhubb...@nvidia.com>

Acked-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>

Looks good, thanks!

        Hans

> ---
>  drivers/media/v4l2-core/videobuf-dma-sg.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/media/v4l2-core/videobuf-dma-sg.c 
> b/drivers/media/v4l2-core/videobuf-dma-sg.c
> index 66a6c6c236a7..28262190c3ab 100644
> --- a/drivers/media/v4l2-core/videobuf-dma-sg.c
> +++ b/drivers/media/v4l2-core/videobuf-dma-sg.c
> @@ -349,8 +349,11 @@ int videobuf_dma_free(struct videobuf_dmabuf *dma)
>       BUG_ON(dma->sglen);
>  
>       if (dma->pages) {
> -             for (i = 0; i < dma->nr_pages; i++)
> +             for (i = 0; i < dma->nr_pages; i++) {
> +                     if (dma->direction == DMA_FROM_DEVICE)
> +                             set_page_dirty_lock(dma->pages[i]);
>                       put_page(dma->pages[i]);
> +             }
>               kfree(dma->pages);
>               dma->pages = NULL;
>       }
> 

Reply via email to