summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2014-02-10 08:08:47 -0300
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-02-24 10:59:15 -0300
commitefab6b6a6ea9364ececb955f69a9d3ffc6b782a1 (patch)
treefcd070bab51db4358c9855d3068093a3a797ab8f
parent38aed47b7e0f6e9a6fe38ef7544970604f7bb595 (diff)
downloadop-kernel-dev-efab6b6a6ea9364ececb955f69a9d3ffc6b782a1.zip
op-kernel-dev-efab6b6a6ea9364ececb955f69a9d3ffc6b782a1.tar.gz
[media] vivi: queue_setup improvements
Drop the vid_limit module option: there is really no need to limit this. No other driver does that. If you try to allocate more buffers then vb2 will automatically reduce the number of buffers anyway. Also add sanity checks if the size in the fmt argument is going to be used and drop the code that checks against *nbuffers == 0: this can never happen (the vb2 framework ensures that) and the code was wrong anyway since *nbuffers should have been set to the minimum number of required buffers which is 1 for this driver. Since vivi is often used as a template driver it is good to have this driver be as compliant as possible. This broken code was for example copied to the s2255 driver (which is being fixed as well). Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
-rw-r--r--drivers/media/platform/vivi.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/drivers/media/platform/vivi.c b/drivers/media/platform/vivi.c
index 4114bb6..e9cd96e 100644
--- a/drivers/media/platform/vivi.c
+++ b/drivers/media/platform/vivi.c
@@ -70,10 +70,6 @@ static unsigned debug;
module_param(debug, uint, 0644);
MODULE_PARM_DESC(debug, "activates debug info");
-static unsigned int vid_limit = 16;
-module_param(vid_limit, uint, 0644);
-MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");
-
/* Global font descriptor */
static const u8 *font8x16;
@@ -816,19 +812,15 @@ static int queue_setup(struct vb2_queue *vq, const struct v4l2_format *fmt,
struct vivi_dev *dev = vb2_get_drv_priv(vq);
unsigned long size;
- if (fmt)
+ size = dev->width * dev->height * dev->pixelsize;
+ if (fmt) {
+ if (fmt->fmt.pix.sizeimage < size)
+ return -EINVAL;
size = fmt->fmt.pix.sizeimage;
- else
- size = dev->width * dev->height * dev->pixelsize;
-
- if (size == 0)
- return -EINVAL;
-
- if (0 == *nbuffers)
- *nbuffers = 32;
-
- while (size * *nbuffers > vid_limit * 1024 * 1024)
- (*nbuffers)--;
+ /* check against insane over 8K resolution buffers */
+ if (size > 7680 * 4320 * dev->pixelsize)
+ return -EINVAL;
+ }
*nplanes = 1;
OpenPOWER on IntegriCloud