On 23/11/2022 14:26, Hans Verkuil wrote: > Hi David, Tomasz, > > On 16/11/2022 11:26, David Hildenbrand wrote: >> FOLL_FORCE is really only for ptrace access. According to commit >> 707947247e95 ("media: videobuf2-vmalloc: get_userptr: buffers are always >> writable"), get_vaddr_frames() currently pins all pages writable as a >> workaround for issues with read-only buffers. > > I've decided to revert 707947247e95: I have not been able to reproduce the problem > described in that commit, and Tomasz reported that it caused problems with a > specific use-case they encountered. I'll post that patch soon and I expect it > to land in 6.2. It will cause a conflict with this patch, though. > > If the problem described in that patch occurs again, then I will revisit it > and hopefully do a better job than I did before. That commit was not my > finest moment. In any case, for this patch: Acked-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx> Regards, Hans > > Regards, > > Hans > >> >> FOLL_FORCE, however, seems to be a legacy leftover as it predates >> commit 707947247e95 ("media: videobuf2-vmalloc: get_userptr: buffers are >> always writable"). Let's just remove it. >> >> Once the read-only buffer issue has been resolved, FOLL_WRITE could >> again be set depending on the DMA direction. >> >> Cc: Hans Verkuil <hverkuil@xxxxxxxxx> >> Cc: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> >> Cc: Tomasz Figa <tfiga@xxxxxxxxxxxx> >> Cc: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> >> Cc: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx> >> Signed-off-by: David Hildenbrand <david@xxxxxxxxxx> >> --- >> drivers/media/common/videobuf2/frame_vector.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/media/common/videobuf2/frame_vector.c b/drivers/media/common/videobuf2/frame_vector.c >> index 542dde9d2609..062e98148c53 100644 >> --- a/drivers/media/common/videobuf2/frame_vector.c >> +++ b/drivers/media/common/videobuf2/frame_vector.c >> @@ -50,7 +50,7 @@ int get_vaddr_frames(unsigned long start, unsigned int nr_frames, >> start = untagged_addr(start); >> >> ret = pin_user_pages_fast(start, nr_frames, >> - FOLL_FORCE | FOLL_WRITE | FOLL_LONGTERM, >> + FOLL_WRITE | FOLL_LONGTERM, >> (struct page **)(vec->ptrs)); >> if (ret > 0) { >> vec->got_ref = true; >