drm/atomic-helpers: Properly avoid full modeset dance

Dan Carpenter dan.carpenter at oracle.com
Fri Mar 27 07:33:00 PDT 2015


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)

regards,
dan carpenter


More information about the dri-devel mailing list