On Tue, Jan 07, 2014 at 02:55:53PM -0200, Paulo Zanoni wrote: > From: Paulo Zanoni <paulo.r.zanoni@xxxxxxxxx> > > In some cases we have more than 1 connector associated to an encoder > (e.g., SDVO, Haswell DP/HDMI) and we can only set a mode for one of > these connectors. If we only allowed modesets for connected connectors > we would never need this patch, but since we do allow modeset for > disconnected connectors we may see user space trying to set modes on > the two connectors attached to the same encoder, so we need to forbid > that. > > This problem can be reproduced by running the following > intel-gpu-tools test case: > ./kms_setmode --run-subtest clone-exclusive-crtc > > Thanks to Daniel Vetter for providing a version of this patch on > pastebin. > > Credits-to: Daniel Vetter <daniel.vetter@xxxxxxxx> > Signed-off-by: Paulo Zanoni <paulo.r.zanoni@xxxxxxxxx> The comment telling what the block does could use a little update, in any case: Reviewed-by: Damien Lespiau <damien.lespiau@xxxxxxxxx> I can't review patch 3/3 as I wrote a part of it, we need to find a victim. -- Damien > --- > drivers/gpu/drm/i915/intel_display.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index a562eef..7cc67b3 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -9922,17 +9922,21 @@ intel_modeset_stage_output_state(struct drm_device *dev, > /* Check for any encoders that needs to be disabled. */ > list_for_each_entry(encoder, &dev->mode_config.encoder_list, > base.head) { > + int num_connectors = 0; > list_for_each_entry(connector, > &dev->mode_config.connector_list, > base.head) { > if (connector->new_encoder == encoder) { > WARN_ON(!connector->new_encoder->new_crtc); > - > - goto next_encoder; > + num_connectors++; > } > } > - encoder->new_crtc = NULL; > -next_encoder: > + > + if (num_connectors == 0) > + encoder->new_crtc = NULL; > + else if (num_connectors > 1) > + return -EINVAL; > + > /* Only now check for crtc changes so we don't miss encoders > * that will be disabled. */ > if (&encoder->new_crtc->base != encoder->base.crtc) { > -- > 1.8.4.2 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx