On Thu, Oct 04, 2018 at 08:29:51PM -0400, Lyude Paul wrote: > As mentioned in the previous commit, we currently prevent new modesets > on recently-removed MST connectors by returning no encoder from our > ->best_encoder() callback once the MST port has disappeared. This is > wrong however, because it prevents legacy modesetting users from being > able to disable CRTCs on MST connectors after the connector's respective > topology has disappeared. > > So, fix this by instead by just always returning a valid encoder. > > Signed-off-by: Lyude Paul <lyude@xxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > > Changes since v2: > - Remove usage of atomic MST helper for now, since that got replaced > with a much simpler solution > > Signed-off-by: Lyude Paul <lyude@xxxxxxxxxx> Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > --- > drivers/gpu/drm/nouveau/dispnv50/disp.c | 14 ++++---------- > 1 file changed, 4 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c > index 5691dfa1db6f..63a23a80f279 100644 > --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c > +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c > @@ -843,22 +843,16 @@ nv50_mstc_atomic_best_encoder(struct drm_connector *connector, > { > struct nv50_head *head = nv50_head(connector_state->crtc); > struct nv50_mstc *mstc = nv50_mstc(connector); > - if (mstc->port) { > - struct nv50_mstm *mstm = mstc->mstm; > - return &mstm->msto[head->base.index]->encoder; > - } > - return NULL; > + > + return &mstc->mstm->msto[head->base.index]->encoder; > } > > static struct drm_encoder * > nv50_mstc_best_encoder(struct drm_connector *connector) > { > struct nv50_mstc *mstc = nv50_mstc(connector); > - if (mstc->port) { > - struct nv50_mstm *mstm = mstc->mstm; > - return &mstm->msto[0]->encoder; > - } > - return NULL; > + > + return &mstc->mstm->msto[0]->encoder; > } > > static enum drm_mode_status > -- > 2.17.1 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch