[Intel-gfx] [PATCH 1/2] drm/i915: Only break encoder linked when linked to connector
Egbert Eich
eich at freedesktop.org
Tue Apr 15 11:14:56 CEST 2014
Chris Wilson writes:
> On Mon, Apr 14, 2014 at 07:26:08PM +0200, Egbert Eich wrote:
> > Depending on the SDVO output_flags SDVO may have multiple connectors
> > linking to the same encoder (in intel_connector->encoder->base).
> > Only one of those connectors should be active (ie link to the encoder
> > thru drm_connector->encoder.
> > If intel_connector_break_all_links() is called from intel_sanitize_crtc()
> > we may brake the crtc connection of an encoder thru an inactive connector
> > in which case intel_connector_break_all_links() will not be called again
> > for the active connector due to
> > if (connector->encoder->base.crtc != &crtc->base)
> > continue;
> > in intel_sanitize_crtc().
> > This will however leave the drm_connector->encoder linkage for this
> > active connector in place. Subsequently this will cause multiple
> > warnings in intel_connector_check_state() to trigger and the driver
> > will eventually die in drm_encoder_crtc_ok() (because of crtc == NULL).
> >
> > To avoid this break the encoder links only if the connector is active
> > (ie. has drm_connector->encoder set).
> >
> > Signed-off-by: Egbert Eich <eich at suse.de>
>
> This just leaves me with a nagging doubt that not all links will then be
> broken. Do we have sufficient sanity checks to detect the obverse? Would
> it be worth adding a second pass over the connector_list to assert that
> all links are then broken?
Possibly. Maybe we should rework intel_sanitize_encoder() a bit:
loop over all drm_connectors, see if a drm_connector->encoder points
to the encoder in question and make sure that the intel_encoder state
(ie connectors_active and base.crtc) is in sync with the results.
I'll think about it some more ...
Cheers,
Egbert.
More information about the Intel-gfx
mailing list