clear-pkgs-linux-iot-lts2018/0803-media-intel-ipu4-fix-b...

246 lines
8.3 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Meng Wei <wei.meng@intel.com>
Date: Tue, 27 Nov 2018 19:32:48 +0800
Subject: [PATCH] media: intel-ipu4: fix build warning
fix build warning.
Change-Id: I09a36e42acd5930b3a2c3c836fb1aed9c862e4c8
Tracked-On: PKT-1624
Signed-off-by: Chen Meng J <meng.j.chen@intel.com>
Signed-off-by: yzha108 <yanli.l.zhang@intel.com>
Signed-off-by: Meng Wei <wei.meng@intel.com>
---
drivers/media/pci/intel/ipu-isys-subdev.c | 89 ++++++++++++++++-------
drivers/media/pci/intel/ipu-isys-subdev.h | 4 +-
2 files changed, 63 insertions(+), 30 deletions(-)
diff --git a/drivers/media/pci/intel/ipu-isys-subdev.c b/drivers/media/pci/intel/ipu-isys-subdev.c
index 01d698528272..a710450143e8 100644
--- a/drivers/media/pci/intel/ipu-isys-subdev.c
+++ b/drivers/media/pci/intel/ipu-isys-subdev.c
@@ -223,7 +223,7 @@ static int target_valid(struct v4l2_subdev *sd, unsigned int target,
}
}
-void ipu_isys_subdev_fmt_propagate(struct v4l2_subdev *sd,
+int ipu_isys_subdev_fmt_propagate(struct v4l2_subdev *sd,
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0)
struct v4l2_subdev_fh *cfg,
#else
@@ -235,16 +235,36 @@ void ipu_isys_subdev_fmt_propagate(struct v4l2_subdev *sd,
unsigned int pad, unsigned int which)
{
struct ipu_isys_subdev *asd = to_ipu_isys_subdev(sd);
- struct v4l2_mbus_framefmt *ffmts[sd->entity.num_pads];
- struct v4l2_rect *crops[sd->entity.num_pads];
- struct v4l2_rect *compose[sd->entity.num_pads];
+ struct v4l2_mbus_framefmt **ffmts = NULL;
+ struct v4l2_rect **crops = NULL;
+ struct v4l2_rect **compose = NULL;
unsigned int i;
+ int rval = 0;
if (tgt == IPU_ISYS_SUBDEV_PROP_TGT_NR_OF)
- return;
+ return 0;
if (WARN_ON(pad >= sd->entity.num_pads))
- return;
+ return -EINVAL;
+
+ ffmts = kcalloc(sd->entity.num_pads,
+ sizeof(*ffmts), GFP_KERNEL);
+ if (!ffmts) {
+ rval = -ENOMEM;
+ goto out_subdev_fmt_propagate;
+ }
+ crops = kcalloc(sd->entity.num_pads,
+ sizeof(*crops), GFP_KERNEL);
+ if (!crops) {
+ rval = -ENOMEM;
+ goto out_subdev_fmt_propagate;
+ }
+ compose = kcalloc(sd->entity.num_pads,
+ sizeof(*compose), GFP_KERNEL);
+ if (!compose) {
+ rval = -ENOMEM;
+ goto out_subdev_fmt_propagate;
+ }
for (i = 0; i < sd->entity.num_pads; i++) {
ffmts[i] = __ipu_isys_get_ffmt(sd, cfg, i, 0, which);
@@ -260,24 +280,26 @@ void ipu_isys_subdev_fmt_propagate(struct v4l2_subdev *sd,
crops[pad]->top = 0;
crops[pad]->width = ffmt->width;
crops[pad]->height = ffmt->height;
- ipu_isys_subdev_fmt_propagate(sd, cfg, ffmt, crops[pad],
+ rval = ipu_isys_subdev_fmt_propagate(sd, cfg, ffmt, crops[pad],
tgt + 1, pad, which);
- return;
+ goto out_subdev_fmt_propagate;
case IPU_ISYS_SUBDEV_PROP_TGT_SINK_CROP:
if (WARN_ON(sd->entity.pads[pad].flags & MEDIA_PAD_FL_SOURCE))
- return;
+ goto out_subdev_fmt_propagate;
compose[pad]->left = 0;
compose[pad]->top = 0;
compose[pad]->width = r->width;
compose[pad]->height = r->height;
- ipu_isys_subdev_fmt_propagate(sd, cfg, ffmt,
+ rval = ipu_isys_subdev_fmt_propagate(sd, cfg, ffmt,
compose[pad], tgt + 1,
pad, which);
- return;
+ goto out_subdev_fmt_propagate;
case IPU_ISYS_SUBDEV_PROP_TGT_SINK_COMPOSE:
- if (WARN_ON(sd->entity.pads[pad].flags & MEDIA_PAD_FL_SOURCE))
- return;
+ if (WARN_ON(sd->entity.pads[pad].flags & MEDIA_PAD_FL_SOURCE)) {
+ rval = -EINVAL;
+ goto out_subdev_fmt_propagate;
+ }
/* 1:n and 1:1 case: only propagate to the first source pad */
if (asd->nsinks == 1 && asd->nsources >= 1) {
@@ -285,10 +307,12 @@ void ipu_isys_subdev_fmt_propagate(struct v4l2_subdev *sd,
compose[asd->nsinks]->top = 0;
compose[asd->nsinks]->width = r->width;
compose[asd->nsinks]->height = r->height;
- ipu_isys_subdev_fmt_propagate(sd, cfg, ffmt,
+ rval = ipu_isys_subdev_fmt_propagate(sd, cfg, ffmt,
compose[asd->nsinks],
tgt + 1, asd->nsinks,
which);
+ if (rval)
+ goto out_subdev_fmt_propagate;
/* n:n case: propagate according to route info */
} else if (asd->nsinks == asd->nsources && asd->nsources > 1) {
for (i = asd->nsinks; i < sd->entity.num_pads; i++)
@@ -300,10 +324,12 @@ void ipu_isys_subdev_fmt_propagate(struct v4l2_subdev *sd,
compose[i]->top = 0;
compose[i]->width = r->width;
compose[i]->height = r->height;
- ipu_isys_subdev_fmt_propagate(sd, cfg, ffmt,
+ rval = ipu_isys_subdev_fmt_propagate(sd, cfg, ffmt,
compose[i],
tgt + 1, i,
which);
+ if (rval)
+ goto out_subdev_fmt_propagate;
}
/* n:m case: propagate to all source pad */
} else if (asd->nsinks != asd->nsources && asd->nsources > 1 &&
@@ -317,25 +343,29 @@ void ipu_isys_subdev_fmt_propagate(struct v4l2_subdev *sd,
compose[i]->top = 0;
compose[i]->width = r->width;
compose[i]->height = r->height;
- ipu_isys_subdev_fmt_propagate(sd, cfg,
+ rval = ipu_isys_subdev_fmt_propagate(sd, cfg,
ffmt,
compose[i],
tgt + 1, i,
which);
+ if (rval)
+ goto out_subdev_fmt_propagate;
}
}
- return;
+ goto out_subdev_fmt_propagate;
case IPU_ISYS_SUBDEV_PROP_TGT_SOURCE_COMPOSE:
- if (WARN_ON(sd->entity.pads[pad].flags & MEDIA_PAD_FL_SINK))
- return;
+ if (WARN_ON(sd->entity.pads[pad].flags & MEDIA_PAD_FL_SINK)) {
+ rval = -EINVAL;
+ goto out_subdev_fmt_propagate;
+ }
crops[pad]->left = 0;
crops[pad]->top = 0;
crops[pad]->width = r->width;
crops[pad]->height = r->height;
- ipu_isys_subdev_fmt_propagate(sd, cfg, ffmt,
+ rval = ipu_isys_subdev_fmt_propagate(sd, cfg, ffmt,
crops[pad], tgt + 1, pad, which);
- return;
+ goto out_subdev_fmt_propagate;
case IPU_ISYS_SUBDEV_PROP_TGT_SOURCE_CROP:{
struct v4l2_subdev_format fmt = {
.which = which,
@@ -356,12 +386,18 @@ void ipu_isys_subdev_fmt_propagate(struct v4l2_subdev *sd,
};
asd->set_ffmt(sd, cfg, &fmt);
- return;
+ goto out_subdev_fmt_propagate;
}
}
+
+out_subdev_fmt_propagate:
+ kfree(ffmts);
+ kfree(crops);
+ kfree(compose);
+ return rval;
}
-void ipu_isys_subdev_set_ffmt_default(struct v4l2_subdev *sd,
+int ipu_isys_subdev_set_ffmt_default(struct v4l2_subdev *sd,
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0)
struct v4l2_subdev_fh *cfg,
#else
@@ -383,7 +419,6 @@ void ipu_isys_subdev_set_ffmt_default(struct v4l2_subdev *sd,
ffmt->height = sink_ffmt->height;
ffmt->code = sink_ffmt->code;
ffmt->field = sink_ffmt->field;
- return;
}
ffmt->width = fmt->format.width;
@@ -391,7 +426,7 @@ void ipu_isys_subdev_set_ffmt_default(struct v4l2_subdev *sd,
ffmt->code = fmt->format.code;
ffmt->field = fmt->format.field;
- ipu_isys_subdev_fmt_propagate(sd, cfg, &fmt->format, NULL,
+ return ipu_isys_subdev_fmt_propagate(sd, cfg, &fmt->format, NULL,
IPU_ISYS_SUBDEV_PROP_TGT_SINK_FMT,
fmt->pad, fmt->which);
}
@@ -698,10 +733,8 @@ int ipu_isys_subdev_set_sel(struct v4l2_subdev *sd,
sel->r.height = clamp(sel->r.height, IPU_ISYS_MIN_HEIGHT, r->height);
*__ipu_isys_get_selection(sd, cfg, sel->target, sel->pad,
sel->which) = sel->r;
- ipu_isys_subdev_fmt_propagate(sd, cfg, NULL, &sel->r, tgt,
+ return ipu_isys_subdev_fmt_propagate(sd, cfg, NULL, &sel->r, tgt,
sel->pad, sel->which);
-
- return 0;
}
int ipu_isys_subdev_get_sel(struct v4l2_subdev *sd,
diff --git a/drivers/media/pci/intel/ipu-isys-subdev.h b/drivers/media/pci/intel/ipu-isys-subdev.h
index 0835a0f4ef6b..034b3562e859 100644
--- a/drivers/media/pci/intel/ipu-isys-subdev.h
+++ b/drivers/media/pci/intel/ipu-isys-subdev.h
@@ -121,7 +121,7 @@ u32 ipu_isys_subdev_code_to_uncompressed(u32 sink_code);
enum ipu_isys_subdev_pixelorder ipu_isys_subdev_get_pixelorder(u32 code);
-void ipu_isys_subdev_fmt_propagate(struct v4l2_subdev *sd,
+int ipu_isys_subdev_fmt_propagate(struct v4l2_subdev *sd,
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0)
struct v4l2_subdev_fh *cfg,
#else
@@ -132,7 +132,7 @@ void ipu_isys_subdev_fmt_propagate(struct v4l2_subdev *sd,
enum isys_subdev_prop_tgt tgt,
unsigned int pad, unsigned int which);
-void ipu_isys_subdev_set_ffmt_default(struct v4l2_subdev *sd,
+int ipu_isys_subdev_set_ffmt_default(struct v4l2_subdev *sd,
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0)
struct v4l2_subdev_fh *cfg,
#else
--
https://clearlinux.org