On 11/10/19 2:10 AM, Hans Verkuil wrote: > 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 <mchehab@xxxxxxxxxx> >> Signed-off-by: John Hubbard <jhubbard@xxxxxxxxxx> > > Acked-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx> > > Looks good, thanks! > Hi Hans, it's great that you could take a look at this and the other v4l2 patch, much appreciated. thanks, -- John Hubbard NVIDIA >> --- >> 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; >> } >> >