* [PATCH v2] [media] fix warning on v4l2_subdev_call() result interpreted as bool
@ 2017-07-19 19:23 Arnd Bergmann
2017-07-19 19:28 ` Dan Carpenter
0 siblings, 1 reply; 2+ messages in thread
From: Arnd Bergmann @ 2017-07-19 19:23 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: Dan Carpenter, Arnd Bergmann, Sakari Ailus, Hans Verkuil,
linux-media, linux-kernel
v4l2_subdev_call is a macro returning whatever the callback return
type is, usually 'int'. With gcc-7 and ccache, this can lead to
many wanings like:
media/platform/pxa_camera.c: In function 'pxa_mbus_build_fmts_xlate':
media/platform/pxa_camera.c:766:27: error: ?: using integer constants in boolean context [-Werror=int-in-bool-context]
while (!v4l2_subdev_call(subdev, pad, enum_mbus_code, NULL, &code)) {
media/atomisp/pci/atomisp2/atomisp_cmd.c: In function 'atomisp_s_ae_window':
media/atomisp/pci/atomisp2/atomisp_cmd.c:6414:52: error: ?: using integer constants in boolean context [-Werror=int-in-bool-context]
if (v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
The problem here is that after preprocessing, we the compiler
sees a variation of
if (a ? 0 : 2)
that it thinks is suspicious.
This replaces the ?: operator with an different expression that
does the same thing in a more easily readable way that cannot
tigger the warning
Link: https://lkml.org/lkml/2017/7/14/156
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
v2: replace large patch touching all the users with a simpler
change to the macro itself.
---
include/media/v4l2-subdev.h | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index 0f92ebd2d710..e83872078376 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -982,8 +982,16 @@ void v4l2_subdev_init(struct v4l2_subdev *sd,
* Example: err = v4l2_subdev_call(sd, video, s_std, norm);
*/
#define v4l2_subdev_call(sd, o, f, args...) \
- (!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ? \
- (sd)->ops->o->f((sd), ##args) : -ENOIOCTLCMD))
+ ({ \
+ int __result; \
+ if (!(sd)) \
+ __result = -ENODEV; \
+ else if (!((sd)->ops->o && (sd)->ops->o->f)) \
+ __result = -ENOIOCTLCMD; \
+ else \
+ __result = (sd)->ops->o->f((sd), ##args); \
+ __result; \
+ })
#define v4l2_subdev_has_op(sd, o, f) \
((sd)->ops->o && (sd)->ops->o->f)
--
2.9.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] [media] fix warning on v4l2_subdev_call() result interpreted as bool
2017-07-19 19:23 [PATCH v2] [media] fix warning on v4l2_subdev_call() result interpreted as bool Arnd Bergmann
@ 2017-07-19 19:28 ` Dan Carpenter
0 siblings, 0 replies; 2+ messages in thread
From: Dan Carpenter @ 2017-07-19 19:28 UTC (permalink / raw)
To: Arnd Bergmann
Cc: Mauro Carvalho Chehab, Sakari Ailus, Hans Verkuil, linux-media,
linux-kernel
Looks good.
regards,
dan carpenter
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-07-19 19:29 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-19 19:23 [PATCH v2] [media] fix warning on v4l2_subdev_call() result interpreted as bool Arnd Bergmann
2017-07-19 19:28 ` Dan Carpenter
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.