If either idling channels or suspending the fence were to fail, the
display would never be resumed. Also if a client fails, resume the fence
(not functionally important, but it would potentially leak memory).

See https://bugs.freedesktop.org/show_bug.cgi?id=70213

Signed-off-by: Ilia Mirkin <[email protected]>
---

Untested, but makes sense given that the bug report has cursor setting
failures, and suspending the display kills the cursor.

 drivers/gpu/drm/nouveau/nouveau_drm.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c 
b/drivers/gpu/drm/nouveau/nouveau_drm.c
index 466037c..bfd02410 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -503,19 +503,21 @@ nouveau_do_suspend(struct drm_device *dev)
        if (drm->cechan) {
                ret = nouveau_channel_idle(drm->cechan);
                if (ret)
-                       return ret;
+                       goto fail_display;
        }
 
        if (drm->channel) {
                ret = nouveau_channel_idle(drm->channel);
                if (ret)
-                       return ret;
+                       goto fail_display;
        }
 
        NV_INFO(drm, "suspending client object trees...\n");
        if (drm->fence && nouveau_fence(drm)->suspend) {
-               if (!nouveau_fence(drm)->suspend(drm))
-                       return -ENOMEM;
+               if (!nouveau_fence(drm)->suspend(drm)) {
+                       ret = -ENOMEM;
+                       goto fail_display;
+               }
        }
 
        list_for_each_entry(cli, &drm->clients, head) {
@@ -537,6 +539,10 @@ fail_client:
                nouveau_client_init(&cli->base);
        }
 
+       if (drm->fence && nouveau_fence(drm)->resume)
+               nouveau_fence(drm)->resume(drm);
+
+fail_display:
        if (dev->mode_config.num_crtc) {
                NV_INFO(drm, "resuming display...\n");
                nouveau_display_resume(dev);
-- 
1.8.3.2

_______________________________________________
Nouveau mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to