drm/atomic-helpers: Properly avoid full modeset dance
Daniel Vetter
daniel at ffwll.ch
Fri Mar 27 08:10:23 PDT 2015
On Fri, Mar 27, 2015 at 05:33:00PM +0300, Dan Carpenter wrote:
> Hello Daniel Vetter,
>
> This is a semi-automatic email about new static checker warnings.
>
> The patch 76b58b03806b: "drm/atomic-helpers: Properly avoid full
> modeset dance" from Mar 26, 2015, leads to the following Smatch
> complaint:
>
> drivers/gpu/drm/drm_atomic_helper.c:615 disable_outputs()
> warn: variable dereferenced before check 'connector->state->crtc' (see line 591)
>
> drivers/gpu/drm/drm_atomic_helper.c
> 590 if (!old_crtc_state->active ||
> 591 !needs_modeset(connector->state->crtc->state))
> ^^^^^^^^^^^^^^^^^^^^^^
> Patch introduces a new dereference.
>
> 592 continue;
> 593
> 594 encoder = old_conn_state->best_encoder;
> 595
> 596 /* We shouldn't get this far if we didn't previously have
> 597 * an encoder.. but WARN_ON() rather than explode.
> 598 */
> 599 if (WARN_ON(!encoder))
> 600 continue;
> 601
> 602 funcs = encoder->helper_private;
> 603
> 604 DRM_DEBUG_ATOMIC("disabling [ENCODER:%d:%s]\n",
> 605 encoder->base.id, encoder->name);
> 606
> 607 /*
> 608 * Each encoder has at most one connector (since we always steal
> 609 * it away), so we won't call disable hooks twice.
> 610 */
> 611 if (encoder->bridge)
> 612 encoder->bridge->funcs->disable(encoder->bridge);
> 613
> 614 /* Right function depends upon target state. */
> 615 if (connector->state->crtc && funcs->prepare)
> ^^^^^^^^^^^^^^^^^^^^^^
> Existing code checks for NULL.
>
> 616 funcs->prepare(encoder);
> 617 else if (funcs->disable)
Thierry was a notch faster with reporting this on irc, already fixed.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the dri-devel
mailing list