Message ID | 20161017221355.1861551-6-arnd@arndb.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 10/18/2016 12:13 AM, Arnd Bergmann wrote: > gcc warns about the timestamp in drm_wait_vblank being possibly > used without an initialization: > > drivers/gpu/drm/drm_irq.c: In function 'drm_crtc_send_vblank_event': > drivers/gpu/drm/drm_irq.c:992:24: error: 'now.tv_usec' may be used uninitialized in this function [-Werror=maybe-uninitialized] > drivers/gpu/drm/drm_irq.c:1069:17: note: 'now.tv_usec' was declared here > drivers/gpu/drm/drm_irq.c:991:23: error: 'now.tv_sec' may be used uninitialized in this function [-Werror=maybe-uninitialized] > > This can happen if drm_vblank_count_and_time() returns 0 in its > error path. To sanitize the error case, I'm changing that function > to return a zero timestamp when it fails. > > Fixes: e6ae8687a87b ("drm: idiot-proof vblank") > Reviewed-by: David Herrmann <dh.herrmann@gmail.com> > Cc: Rob Clark <robdclark@gmail.com> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch> > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > First submitted in January 2016, second submission in February, > the patch is still required. > > drivers/gpu/drm/drm_irq.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c > index b969a64..48a6167 100644 > --- a/drivers/gpu/drm/drm_irq.c > +++ b/drivers/gpu/drm/drm_irq.c > @@ -952,8 +952,10 @@ static u32 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe, > u32 vblank_count; > unsigned int seq; > > - if (WARN_ON(pipe >= dev->num_crtcs)) > + if (WARN_ON(pipe >= dev->num_crtcs)) { > + *vblanktime = (struct timeval) { 0 }; > return 0; > + } > > do { > seq = read_seqbegin(&vblank->seqlock); > Looks good to me. Reviewed-by: Mario Kleiner <mario.kleiner.de@gmail.com> -mario
On Tue, Oct 18, 2016 at 01:47:24AM +0200, Mario Kleiner wrote: > On 10/18/2016 12:13 AM, Arnd Bergmann wrote: > > gcc warns about the timestamp in drm_wait_vblank being possibly > > used without an initialization: > > > > drivers/gpu/drm/drm_irq.c: In function 'drm_crtc_send_vblank_event': > > drivers/gpu/drm/drm_irq.c:992:24: error: 'now.tv_usec' may be used uninitialized in this function [-Werror=maybe-uninitialized] > > drivers/gpu/drm/drm_irq.c:1069:17: note: 'now.tv_usec' was declared here > > drivers/gpu/drm/drm_irq.c:991:23: error: 'now.tv_sec' may be used uninitialized in this function [-Werror=maybe-uninitialized] > > > > This can happen if drm_vblank_count_and_time() returns 0 in its > > error path. To sanitize the error case, I'm changing that function > > to return a zero timestamp when it fails. > > > > Fixes: e6ae8687a87b ("drm: idiot-proof vblank") > > Reviewed-by: David Herrmann <dh.herrmann@gmail.com> > > Cc: Rob Clark <robdclark@gmail.com> > > Cc: Daniel Vetter <daniel.vetter@ffwll.ch> > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > > --- > > First submitted in January 2016, second submission in February, > > the patch is still required. Hm, sorry I missed that. > > drivers/gpu/drm/drm_irq.c | 4 +++- > > 1 file changed, 3 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c > > index b969a64..48a6167 100644 > > --- a/drivers/gpu/drm/drm_irq.c > > +++ b/drivers/gpu/drm/drm_irq.c > > @@ -952,8 +952,10 @@ static u32 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe, > > u32 vblank_count; > > unsigned int seq; > > > > - if (WARN_ON(pipe >= dev->num_crtcs)) > > + if (WARN_ON(pipe >= dev->num_crtcs)) { > > + *vblanktime = (struct timeval) { 0 }; > > return 0; > > + } > > > > do { > > seq = read_seqbegin(&vblank->seqlock); > > > > Looks good to me. > > Reviewed-by: Mario Kleiner <mario.kleiner.de@gmail.com> Applied to drm-misc, thanks. -Daniel
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index b969a64..48a6167 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c @@ -952,8 +952,10 @@ static u32 drm_vblank_count_and_time(struct drm_device *dev, unsigned int pipe, u32 vblank_count; unsigned int seq; - if (WARN_ON(pipe >= dev->num_crtcs)) + if (WARN_ON(pipe >= dev->num_crtcs)) { + *vblanktime = (struct timeval) { 0 }; return 0; + } do { seq = read_seqbegin(&vblank->seqlock);