linux/drivers/media/v4l2-core
Tomasz Figa 758d90e161 [media] v4l2-core: Use kvmalloc() for potentially big allocations
There are multiple places where arrays or otherwise variable sized
buffer are allocated through V4L2 core code, including things like
controls, memory pages, staging buffers for ioctls and so on. Such
allocations can potentially require an order > 0 allocation from the
page allocator, which is not guaranteed to be fulfilled and is likely to
fail on a system with severe memory fragmentation (e.g. a system with
very long uptime).

Since the memory being allocated is intended to be used by the CPU
exclusively, we can consider using vmalloc() as a fallback and this is
exactly what the recently merged kvmalloc() helpers do. A kmalloc() call
is still attempted, even for order > 0 allocations, but it is done
with __GFP_NORETRY and __GFP_NOWARN, with expectation of failing if
requested memory is not available instantly. Only then the vmalloc()
fallback is used. This should give us fast and more reliable allocations
even on systems with higher memory pressure and/or more fragmentation,
while still retaining the same performance level on systems not
suffering from such conditions.

While at it, replace explicit array size calculations on changed
allocations with kvmalloc_array().

Purposedly not touching videobuf1, as it is deprecated, has only few
users remaining and would rather be seen removed instead.

Signed-off-by: Tomasz Figa <tfiga@chromium.org>
Acked-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
2017-06-20 09:11:48 -03:00
..
Kconfig [media] v4l: fwnode: Support generic fwnode for parsing standardised properties 2017-06-06 09:25:16 -03:00
Makefile [media] v4l: Remove V4L2 OF framework in favour of V4L2 fwnode framework 2017-06-06 10:00:03 -03:00
tuner-core.c scripts/spelling.txt: add "applys" pattern and fix typo instances 2017-02-27 18:43:47 -08:00
v4l2-async.c [media] v4l2-core: Use kvmalloc() for potentially big allocations 2017-06-20 09:11:48 -03:00
v4l2-clk.c [media] v4l2-clk: v4l2_clk_get() also need to find the of_fullname clock 2015-11-17 15:19:52 -02:00
v4l2-common.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
v4l2-compat-ioctl32.c [media] v4l: Add metadata buffer type and format 2017-04-14 22:37:02 -03:00
v4l2-ctrls.c [media] v4l2-core: Use kvmalloc() for potentially big allocations 2017-06-20 09:11:48 -03:00
v4l2-dev.c [media] v4l: Add metadata buffer type and format 2017-04-14 22:37:02 -03:00
v4l2-device.c [media] v4l: Allow calling v4l2_device_register_subdev_nodes() multiple times 2017-03-22 11:21:43 -03:00
v4l2-dv-timings.c [media] v4l2-dv-timings: add helpers for vic and pixelaspect ratio 2016-11-16 15:20:03 -02:00
v4l2-event.c [media] v4l2-core: Use kvmalloc() for potentially big allocations 2017-06-20 09:11:48 -03:00
v4l2-fh.c [media] media: Drop FSF's postal address from the source code files 2017-01-27 11:38:09 -02:00
v4l2-flash-led-class.c [media] v4l: flash led class: Use fwnode_handle instead of device_node in init 2017-06-06 09:27:51 -03:00
v4l2-fwnode.c [media] v4l: fwnode: Support generic fwnode for parsing standardised properties 2017-06-06 09:25:16 -03:00
v4l2-ioctl.c [media] v4l2-core: Use kvmalloc() for potentially big allocations 2017-06-20 09:11:48 -03:00
v4l2-mc.c [media] media: Protect enable_source and disable_source handler code paths 2017-02-03 07:39:35 -02:00
v4l2-mem2mem.c [media] media: v4l2-mem2mem: extend m2m APIs for more accurate buffer management 2017-06-20 08:53:39 -03:00
v4l2-subdev.c [media] v4l2-core: Use kvmalloc() for potentially big allocations 2017-06-20 09:11:48 -03:00
v4l2-trace.c [media] media: videobuf2: Prepare to divide videobuf2 2015-10-20 15:12:45 -02:00
vb2-trace.c [media] media: videobuf2: Prepare to divide videobuf2 2015-10-20 15:12:45 -02:00
videobuf2-core.c [media] vb2: Fix error handling in '__vb2_buf_mem_alloc' 2017-06-20 09:04:46 -03:00
videobuf2-dma-contig.c media updates for v4.12-rc1 2017-05-05 17:34:57 -07:00
videobuf2-dma-sg.c [media] v4l2-core: Use kvmalloc() for potentially big allocations 2017-06-20 09:11:48 -03:00
videobuf2-dvb.c [media] add media controller support to videobuf2-dvb 2016-02-10 07:23:41 -02:00
videobuf2-memops.c [media] vb2: convert vb2_vmarea_handler refcount from atomic_t to refcount_t 2017-04-05 15:31:57 -03:00
videobuf2-v4l2.c [media] v4l: Add metadata buffer type and format 2017-04-14 22:37:02 -03:00
videobuf2-vmalloc.c media updates for v4.12-rc1 2017-05-05 17:34:57 -07:00
videobuf-core.c [media] v4l2-core: don't break long lines 2016-10-21 09:56:08 -02:00
videobuf-dma-contig.c [media] videobuf-dma-contig: set vm_pgoff to be zero to pass the sanity check in vm_iomap_memory() 2014-10-24 09:32:41 -02:00
videobuf-dma-sg.c sched/headers: Prepare to remove the <linux/mm_types.h> dependency from <linux/sched.h> 2017-03-02 08:42:37 +01:00
videobuf-dvb.c
videobuf-vmalloc.c [media] Revert "[media] videobuf_vm_{open,close} race fixes" 2014-02-04 06:29:46 -02:00