The media model assumes that buffers are all preallocated, so that
when a media pipeline is running we never miss a deadline because the
buffers aren't allocated or available.

This means we cannot fix the v4l follow_pfn usage through
mmu_notifier, without breaking how this all works. The only real fix
is to deprecate userptr support for VM_IO | VM_PFNMAP mappings and
tell everyone to cut over to dma-buf memory sharing for zerocopy.

userptr for normal memory will keep working as-is.

Signed-off-by: Daniel Vetter <daniel.vet...@intel.com>
Cc: Jason Gunthorpe <j...@ziepe.ca>
Cc: Kees Cook <keesc...@chromium.org>
Cc: Dan Williams <dan.j.willi...@intel.com>
Cc: Andrew Morton <a...@linux-foundation.org>
Cc: John Hubbard <jhubb...@nvidia.com>
Cc: Jérôme Glisse <jgli...@redhat.com>
Cc: Jan Kara <j...@suse.cz>
Cc: Dan Williams <dan.j.willi...@intel.com>
Cc: linux...@kvack.org
Cc: linux-arm-ker...@lists.infradead.org
Cc: linux-samsung-...@vger.kernel.org
Cc: linux-me...@vger.kernel.org
Cc: Pawel Osciak <pa...@osciak.com>
Cc: Marek Szyprowski <m.szyprow...@samsung.com>
Cc: Kyungmin Park <kyungmin.p...@samsung.com>
Cc: Tomasz Figa <tf...@chromium.org>
Cc: Laurent Dufour <lduf...@linux.ibm.com>
Cc: Vlastimil Babka <vba...@suse.cz>
Cc: Daniel Jordan <daniel.m.jor...@oracle.com>
Cc: Michel Lespinasse <wal...@google.com>
---
 drivers/media/common/videobuf2/frame_vector.c | 2 +-
 drivers/media/v4l2-core/videobuf-dma-contig.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/media/common/videobuf2/frame_vector.c 
b/drivers/media/common/videobuf2/frame_vector.c
index b95f4f371681..d56eb6258f09 100644
--- a/drivers/media/common/videobuf2/frame_vector.c
+++ b/drivers/media/common/videobuf2/frame_vector.c
@@ -71,7 +71,7 @@ int get_vaddr_frames(unsigned long start, unsigned int 
nr_frames,
                unsigned long *nums = frame_vector_pfns(vec);
 
                while (ret < nr_frames && start + PAGE_SIZE <= vma->vm_end) {
-                       err = follow_pfn(vma, start, &nums[ret]);
+                       err = unsafe_follow_pfn(vma, start, &nums[ret]);
                        if (err) {
                                if (ret == 0)
                                        ret = err;
diff --git a/drivers/media/v4l2-core/videobuf-dma-contig.c 
b/drivers/media/v4l2-core/videobuf-dma-contig.c
index 52312ce2ba05..821c4a76ab96 100644
--- a/drivers/media/v4l2-core/videobuf-dma-contig.c
+++ b/drivers/media/v4l2-core/videobuf-dma-contig.c
@@ -183,7 +183,7 @@ static int videobuf_dma_contig_user_get(struct 
videobuf_dma_contig_memory *mem,
        user_address = untagged_baddr;
 
        while (pages_done < (mem->size >> PAGE_SHIFT)) {
-               ret = follow_pfn(vma, user_address, &this_pfn);
+               ret = unsafe_follow_pfn(vma, user_address, &this_pfn);
                if (ret)
                        break;
 
-- 
2.28.0

Reply via email to