drm/nouveau/drm/nouveau: Check rc from drm_dp_mst_topology_mgr_resume()
authorLyude Paul <lyude@redhat.com>
Thu, 15 Nov 2018 01:39:51 +0000 (20:39 -0500)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 11 Dec 2018 05:37:09 +0000 (15:37 +1000)
We need to actually make sure we check this on resume since otherwise we
won't know whether or not the topology is still there once we've
resumed, which will cause us to still think the topology is connected
even after it's been removed if the removal happens mid-suspend.

Signed-off-by: Lyude Paul <lyude@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/dispnv50/disp.c

index 6cbbae3..6aa3521 100644 (file)
@@ -1255,8 +1255,16 @@ nv50_mstm_fini(struct nv50_mstm *mstm)
 static void
 nv50_mstm_init(struct nv50_mstm *mstm)
 {
-       if (mstm && mstm->mgr.mst_state)
-               drm_dp_mst_topology_mgr_resume(&mstm->mgr);
+       int ret;
+
+       if (!mstm || !mstm->mgr.mst_state)
+               return;
+
+       ret = drm_dp_mst_topology_mgr_resume(&mstm->mgr);
+       if (ret == -1) {
+               drm_dp_mst_topology_mgr_set_mst(&mstm->mgr, false);
+               drm_kms_helper_hotplug_event(mstm->mgr.dev);
+       }
 }
 
 static void