media: videobuf2: Move frame_vector into media subsystem
It's the only user. This also garbage collects the CONFIG_FRAME_VECTOR symbol from all over the tree (well just one place, somehow omap media driver still had this in its Kconfig, despite not using it). Reviewed-by: John Hubbard <jhubbard@nvidia.com> Acked-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Acked-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Acked-by: Tomasz Figa <tfiga@chromium.org> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Pawel Osciak <pawel@osciak.com> Cc: Marek Szyprowski <m.szyprowski@samsung.com> Cc: Kyungmin Park <kyungmin.park@samsung.com> Cc: Tomasz Figa <tfiga@chromium.org> Cc: Mauro Carvalho Chehab <mchehab@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: John Hubbard <jhubbard@nvidia.com> Cc: Jérôme Glisse <jglisse@redhat.com> Cc: Jan Kara <jack@suse.cz> Cc: Dan Williams <dan.j.williams@intel.com> Cc: linux-mm@kvack.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-samsung-soc@vger.kernel.org Cc: linux-media@vger.kernel.org Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20201127164131.2244124-7-daniel.vetter@ffwll.chmaster
parent
04769cb1c4
commit
eb83b8e3e6
|
@ -9,7 +9,6 @@ config VIDEOBUF2_V4L2
|
||||||
|
|
||||||
config VIDEOBUF2_MEMOPS
|
config VIDEOBUF2_MEMOPS
|
||||||
tristate
|
tristate
|
||||||
select FRAME_VECTOR
|
|
||||||
|
|
||||||
config VIDEOBUF2_DMA_CONTIG
|
config VIDEOBUF2_DMA_CONTIG
|
||||||
tristate
|
tristate
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
videobuf2-common-objs := videobuf2-core.o
|
videobuf2-common-objs := videobuf2-core.o
|
||||||
|
videobuf2-common-objs += frame_vector.o
|
||||||
|
|
||||||
ifeq ($(CONFIG_TRACEPOINTS),y)
|
ifeq ($(CONFIG_TRACEPOINTS),y)
|
||||||
videobuf2-common-objs += vb2-trace.o
|
videobuf2-common-objs += vb2-trace.o
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
#include <linux/pagemap.h>
|
#include <linux/pagemap.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
|
||||||
|
#include <media/frame_vector.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get_vaddr_frames() - map virtual addresses to pfns
|
* get_vaddr_frames() - map virtual addresses to pfns
|
||||||
* @start: starting user address
|
* @start: starting user address
|
|
@ -12,6 +12,5 @@ config VIDEO_OMAP2_VOUT
|
||||||
depends on VIDEO_V4L2
|
depends on VIDEO_V4L2
|
||||||
select VIDEOBUF2_DMA_CONTIG
|
select VIDEOBUF2_DMA_CONTIG
|
||||||
select OMAP2_VRFB if ARCH_OMAP2 || ARCH_OMAP3
|
select OMAP2_VRFB if ARCH_OMAP2 || ARCH_OMAP3
|
||||||
select FRAME_VECTOR
|
|
||||||
help
|
help
|
||||||
V4L2 Display driver support for OMAP2/3 based boards.
|
V4L2 Display driver support for OMAP2/3 based boards.
|
||||||
|
|
|
@ -1754,48 +1754,6 @@ int account_locked_vm(struct mm_struct *mm, unsigned long pages, bool inc);
|
||||||
int __account_locked_vm(struct mm_struct *mm, unsigned long pages, bool inc,
|
int __account_locked_vm(struct mm_struct *mm, unsigned long pages, bool inc,
|
||||||
struct task_struct *task, bool bypass_rlim);
|
struct task_struct *task, bool bypass_rlim);
|
||||||
|
|
||||||
/* Container for pinned pfns / pages */
|
|
||||||
struct frame_vector {
|
|
||||||
unsigned int nr_allocated; /* Number of frames we have space for */
|
|
||||||
unsigned int nr_frames; /* Number of frames stored in ptrs array */
|
|
||||||
bool got_ref; /* Did we pin pages by getting page ref? */
|
|
||||||
bool is_pfns; /* Does array contain pages or pfns? */
|
|
||||||
void *ptrs[]; /* Array of pinned pfns / pages. Use
|
|
||||||
* pfns_vector_pages() or pfns_vector_pfns()
|
|
||||||
* for access */
|
|
||||||
};
|
|
||||||
|
|
||||||
struct frame_vector *frame_vector_create(unsigned int nr_frames);
|
|
||||||
void frame_vector_destroy(struct frame_vector *vec);
|
|
||||||
int get_vaddr_frames(unsigned long start, unsigned int nr_pfns,
|
|
||||||
struct frame_vector *vec);
|
|
||||||
void put_vaddr_frames(struct frame_vector *vec);
|
|
||||||
int frame_vector_to_pages(struct frame_vector *vec);
|
|
||||||
void frame_vector_to_pfns(struct frame_vector *vec);
|
|
||||||
|
|
||||||
static inline unsigned int frame_vector_count(struct frame_vector *vec)
|
|
||||||
{
|
|
||||||
return vec->nr_frames;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct page **frame_vector_pages(struct frame_vector *vec)
|
|
||||||
{
|
|
||||||
if (vec->is_pfns) {
|
|
||||||
int err = frame_vector_to_pages(vec);
|
|
||||||
|
|
||||||
if (err)
|
|
||||||
return ERR_PTR(err);
|
|
||||||
}
|
|
||||||
return (struct page **)(vec->ptrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline unsigned long *frame_vector_pfns(struct frame_vector *vec)
|
|
||||||
{
|
|
||||||
if (!vec->is_pfns)
|
|
||||||
frame_vector_to_pfns(vec);
|
|
||||||
return (unsigned long *)(vec->ptrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct kvec;
|
struct kvec;
|
||||||
int get_kernel_pages(const struct kvec *iov, int nr_pages, int write,
|
int get_kernel_pages(const struct kvec *iov, int nr_pages, int write,
|
||||||
struct page **pages);
|
struct page **pages);
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
|
#ifndef _MEDIA_FRAME_VECTOR_H
|
||||||
|
#define _MEDIA_FRAME_VECTOR_H
|
||||||
|
|
||||||
|
/* Container for pinned pfns / pages in frame_vector.c */
|
||||||
|
struct frame_vector {
|
||||||
|
unsigned int nr_allocated; /* Number of frames we have space for */
|
||||||
|
unsigned int nr_frames; /* Number of frames stored in ptrs array */
|
||||||
|
bool got_ref; /* Did we pin pages by getting page ref? */
|
||||||
|
bool is_pfns; /* Does array contain pages or pfns? */
|
||||||
|
void *ptrs[]; /* Array of pinned pfns / pages. Use
|
||||||
|
* pfns_vector_pages() or pfns_vector_pfns()
|
||||||
|
* for access */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct frame_vector *frame_vector_create(unsigned int nr_frames);
|
||||||
|
void frame_vector_destroy(struct frame_vector *vec);
|
||||||
|
int get_vaddr_frames(unsigned long start, unsigned int nr_pfns,
|
||||||
|
struct frame_vector *vec);
|
||||||
|
void put_vaddr_frames(struct frame_vector *vec);
|
||||||
|
int frame_vector_to_pages(struct frame_vector *vec);
|
||||||
|
void frame_vector_to_pfns(struct frame_vector *vec);
|
||||||
|
|
||||||
|
static inline unsigned int frame_vector_count(struct frame_vector *vec)
|
||||||
|
{
|
||||||
|
return vec->nr_frames;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct page **frame_vector_pages(struct frame_vector *vec)
|
||||||
|
{
|
||||||
|
if (vec->is_pfns) {
|
||||||
|
int err = frame_vector_to_pages(vec);
|
||||||
|
|
||||||
|
if (err)
|
||||||
|
return ERR_PTR(err);
|
||||||
|
}
|
||||||
|
return (struct page **)(vec->ptrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline unsigned long *frame_vector_pfns(struct frame_vector *vec)
|
||||||
|
{
|
||||||
|
if (!vec->is_pfns)
|
||||||
|
frame_vector_to_pfns(vec);
|
||||||
|
return (unsigned long *)(vec->ptrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _MEDIA_FRAME_VECTOR_H */
|
|
@ -18,6 +18,7 @@
|
||||||
#include <linux/dma-buf.h>
|
#include <linux/dma-buf.h>
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <media/media-request.h>
|
#include <media/media-request.h>
|
||||||
|
#include <media/frame_vector.h>
|
||||||
|
|
||||||
#define VB2_MAX_FRAME (32)
|
#define VB2_MAX_FRAME (32)
|
||||||
#define VB2_MAX_PLANES (8)
|
#define VB2_MAX_PLANES (8)
|
||||||
|
|
|
@ -804,9 +804,6 @@ config DEVICE_PRIVATE
|
||||||
config VMAP_PFN
|
config VMAP_PFN
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config FRAME_VECTOR
|
|
||||||
bool
|
|
||||||
|
|
||||||
config ARCH_USES_HIGH_VMA_FLAGS
|
config ARCH_USES_HIGH_VMA_FLAGS
|
||||||
bool
|
bool
|
||||||
config ARCH_HAS_PKEYS
|
config ARCH_HAS_PKEYS
|
||||||
|
|
|
@ -110,7 +110,6 @@ obj-$(CONFIG_PAGE_EXTENSION) += page_ext.o
|
||||||
obj-$(CONFIG_CMA_DEBUGFS) += cma_debug.o
|
obj-$(CONFIG_CMA_DEBUGFS) += cma_debug.o
|
||||||
obj-$(CONFIG_USERFAULTFD) += userfaultfd.o
|
obj-$(CONFIG_USERFAULTFD) += userfaultfd.o
|
||||||
obj-$(CONFIG_IDLE_PAGE_TRACKING) += page_idle.o
|
obj-$(CONFIG_IDLE_PAGE_TRACKING) += page_idle.o
|
||||||
obj-$(CONFIG_FRAME_VECTOR) += frame_vector.o
|
|
||||||
obj-$(CONFIG_DEBUG_PAGE_REF) += debug_page_ref.o
|
obj-$(CONFIG_DEBUG_PAGE_REF) += debug_page_ref.o
|
||||||
obj-$(CONFIG_HARDENED_USERCOPY) += usercopy.o
|
obj-$(CONFIG_HARDENED_USERCOPY) += usercopy.o
|
||||||
obj-$(CONFIG_PERCPU_STATS) += percpu-stats.o
|
obj-$(CONFIG_PERCPU_STATS) += percpu-stats.o
|
||||||
|
|
Loading…
Reference in New Issue