* [PATCH] drm: msm: avoid false-positive -Wmaybe-uninitialized warning
@ 2017-12-04 14:44 Arnd Bergmann
2017-12-04 16:36 ` Laurent Pinchart
0 siblings, 1 reply; 3+ messages in thread
From: Arnd Bergmann @ 2017-12-04 14:44 UTC (permalink / raw)
To: Rob Clark, David Airlie
Cc: Arnd Bergmann, Archit Taneja, Daniel Vetter, Liviu Dudau,
Laurent Pinchart, Gustavo Padovan, linux-arm-msm, dri-devel,
freedreno, linux-kernel
gcc-8 -fsanitize-coverage=trace-pc produces a false-positive warning:
drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c: In function 'mdp5_plane_mode_set.isra.8':
drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c:1053:3: error: 'crtc_x_r' may be used uninitialized in this function [-Werror=maybe-uninitialized]
It's relatively clear from reading the source that this cannot happen,
and older compilers get it right. This rearranges the code remove
the two affected variables, which reliably avoids the problem.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
index be50445f9901..c50449882037 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
@@ -964,8 +964,6 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,
uint32_t src_x, src_y;
uint32_t src_w, src_h;
uint32_t src_img_w, src_img_h;
- uint32_t src_x_r;
- int crtc_x_r;
int ret;
nplanes = fb->format->num_planes;
@@ -1010,9 +1008,6 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,
crtc_w /= 2;
src_w /= 2;
src_img_w /= 2;
-
- crtc_x_r = crtc_x + crtc_w;
- src_x_r = src_x + src_w;
}
ret = calc_scalex_steps(plane, pix_format, src_w, crtc_w, step.x);
@@ -1052,9 +1047,9 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,
if (right_hwpipe)
mdp5_hwpipe_mode_set(mdp5_kms, right_hwpipe, fb, &step, &pe,
config, hdecm, vdecm, hflip, vflip,
- crtc_x_r, crtc_y, crtc_w, crtc_h,
+ crtc_x + crtc_w, crtc_y, crtc_w, crtc_h,
src_img_w, src_img_h,
- src_x_r, src_y, src_w, src_h);
+ src_x + src_w, src_y, src_w, src_h);
plane->fb = fb;
--
2.9.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] drm: msm: avoid false-positive -Wmaybe-uninitialized warning
2017-12-04 14:44 [PATCH] drm: msm: avoid false-positive -Wmaybe-uninitialized warning Arnd Bergmann
@ 2017-12-04 16:36 ` Laurent Pinchart
2017-12-04 16:58 ` Arnd Bergmann
0 siblings, 1 reply; 3+ messages in thread
From: Laurent Pinchart @ 2017-12-04 16:36 UTC (permalink / raw)
To: Arnd Bergmann
Cc: Rob Clark, David Airlie, Archit Taneja, Daniel Vetter,
Liviu Dudau, Gustavo Padovan, linux-arm-msm, dri-devel, freedreno,
linux-kernel
Hi Arnd,
Thank you for the patch.
On Monday, 4 December 2017 16:44:23 EET Arnd Bergmann wrote:
> gcc-8 -fsanitize-coverage=trace-pc produces a false-positive warning:
>
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c: In function
> 'mdp5_plane_mode_set.isra.8':
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c:1053:3: error: 'crtc_x_r' may be
> used uninitialized in this function [-Werror=maybe-uninitialized]
>
> It's relatively clear from reading the source that this cannot happen,
> and older compilers get it right. This rearranges the code remove
> the two affected variables, which reliably avoids the problem.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
The patch looks good to me, so
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
However I think it would also be useful to file a bug report for gcc,
especially if older versions got this right.
> ---
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 9 ++-------
> 1 file changed, 2 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c index
> be50445f9901..c50449882037 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> @@ -964,8 +964,6 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,
> uint32_t src_x, src_y;
> uint32_t src_w, src_h;
> uint32_t src_img_w, src_img_h;
> - uint32_t src_x_r;
> - int crtc_x_r;
> int ret;
>
> nplanes = fb->format->num_planes;
> @@ -1010,9 +1008,6 @@ static int mdp5_plane_mode_set(struct drm_plane
> *plane, crtc_w /= 2;
> src_w /= 2;
> src_img_w /= 2;
> -
> - crtc_x_r = crtc_x + crtc_w;
> - src_x_r = src_x + src_w;
> }
>
> ret = calc_scalex_steps(plane, pix_format, src_w, crtc_w, step.x);
> @@ -1052,9 +1047,9 @@ static int mdp5_plane_mode_set(struct drm_plane
> *plane, if (right_hwpipe)
> mdp5_hwpipe_mode_set(mdp5_kms, right_hwpipe, fb, &step, &pe,
> config, hdecm, vdecm, hflip, vflip,
> - crtc_x_r, crtc_y, crtc_w, crtc_h,
> + crtc_x + crtc_w, crtc_y, crtc_w, crtc_h,
> src_img_w, src_img_h,
> - src_x_r, src_y, src_w, src_h);
> + src_x + src_w, src_y, src_w, src_h);
>
> plane->fb = fb;
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] drm: msm: avoid false-positive -Wmaybe-uninitialized warning
2017-12-04 16:36 ` Laurent Pinchart
@ 2017-12-04 16:58 ` Arnd Bergmann
0 siblings, 0 replies; 3+ messages in thread
From: Arnd Bergmann @ 2017-12-04 16:58 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Rob Clark, David Airlie, Archit Taneja, Daniel Vetter,
Liviu Dudau, Gustavo Padovan, linux-arm-msm, dri-devel, freedreno,
Linux Kernel Mailing List
On Mon, Dec 4, 2017 at 5:36 PM, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
> Hi Arnd,
>
> Thank you for the patch.
>
> On Monday, 4 December 2017 16:44:23 EET Arnd Bergmann wrote:
>> gcc-8 -fsanitize-coverage=trace-pc produces a false-positive warning:
>>
>> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c: In function
>> 'mdp5_plane_mode_set.isra.8':
>> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c:1053:3: error: 'crtc_x_r' may be
>> used uninitialized in this function [-Werror=maybe-uninitialized]
>>
>> It's relatively clear from reading the source that this cannot happen,
>> and older compilers get it right. This rearranges the code remove
>> the two affected variables, which reliably avoids the problem.
>>
>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>
> The patch looks good to me, so
>
> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>
> However I think it would also be useful to file a bug report for gcc,
> especially if older versions got this right.
I was rather close to it, and even spent time on a reduced test case
with "creduce", which came down to
int drm_rect_width_r_0, calc_phase_step_src, calc_scalex_steps_ret,
calc_scalex_steps_dest, calc_scaley_steps_ret, calc_scaley_steps_dest,
mdp5_plane_mode_set___trans_tmp_2;
struct mdp5_hw_pipe {
int caps;
} * mdp5_plane_mode_set_right_hwpipe;
int fn1(int p1) {
if (calc_phase_step_src || p1 == 0)
return 2;
if (calc_phase_step_src > p1)
return 5;
return 0;
}
int fn2() {
struct mdp5_hw_pipe hwpipe = hwpipe;
int src_x_r;
if (mdp5_plane_mode_set_right_hwpipe)
src_x_r = drm_rect_width_r_0;
calc_scalex_steps_ret = fn1(calc_scalex_steps_dest);
if (calc_scalex_steps_ret)
return calc_scalex_steps_ret;
calc_scaley_steps_ret = fn1(calc_scaley_steps_dest);
if (calc_scaley_steps_ret)
return calc_scaley_steps_ret;
if (hwpipe.caps)
if (mdp5_plane_mode_set_right_hwpipe)
mdp5_plane_mode_set___trans_tmp_2 = src_x_r;
return calc_scaley_steps_ret;
}
This is still not something that is "obviously" wrong, it seems rather
that gcc can't keep track of enough state at the same time, which
is a fundamental problem but also a bit unpredictable.
I've seen many false-positive (and also false-negative) -Wmaybe-uninitialized
warnings that are likely easier to fix than this particular one, so I
ended up not reporting it.
Arnd
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-12-04 16:58 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-12-04 14:44 [PATCH] drm: msm: avoid false-positive -Wmaybe-uninitialized warning Arnd Bergmann
2017-12-04 16:36 ` Laurent Pinchart
2017-12-04 16:58 ` Arnd Bergmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox