linux/include/media/videobuf2-memops.h
Hans Verkuil e2fc6edd37 media: videobuf2: revert "get_userptr: buffers are always writable"
Commit 707947247e ("media: videobuf2-vmalloc: get_userptr: buffers are
always writable") caused problems in a corner case (passing read-only
shmem memory as a userptr). So revert this patch.

The original problem for which that commit was originally made is
something that I could not reproduce after reverting it. So just go
back to the way it was for many years, and if problems arise in
the future, then another approach should be taken to resolve it.

This patch is based on a patch from Hirokazu.

Fixes: 707947247e ("media: videobuf2-vmalloc: get_userptr: buffers are always writable")
Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Acked-by: Tomasz Figa <tfiga@chromium.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
2022-12-06 07:14:31 +00:00

42 lines
1.1 KiB
C

/*
* videobuf2-memops.h - generic memory handling routines for videobuf2
*
* Copyright (C) 2010 Samsung Electronics
*
* Author: Pawel Osciak <pawel@osciak.com>
* Marek Szyprowski <m.szyprowski@samsung.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation.
*/
#ifndef _MEDIA_VIDEOBUF2_MEMOPS_H
#define _MEDIA_VIDEOBUF2_MEMOPS_H
#include <media/videobuf2-v4l2.h>
#include <linux/mm.h>
#include <linux/refcount.h>
/**
* struct vb2_vmarea_handler - common vma refcount tracking handler.
*
* @refcount: pointer to &refcount_t entry in the buffer.
* @put: callback to function that decreases buffer refcount.
* @arg: argument for @put callback.
*/
struct vb2_vmarea_handler {
refcount_t *refcount;
void (*put)(void *arg);
void *arg;
};
extern const struct vm_operations_struct vb2_common_vm_ops;
struct frame_vector *vb2_create_framevec(unsigned long start,
unsigned long length,
bool write);
void vb2_destroy_framevec(struct frame_vector *vec);
#endif