drm/nouveau: fix oops on runtime suspend/resume
authorDave Airlie <airlied@gmail.com>
Sun, 8 Sep 2013 21:30:56 +0000 (07:30 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 10 Sep 2013 02:38:53 +0000 (12:38 +1000)
if we have no crtcs we need to not call the display resume code.

Reported-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/nouveau/nouveau_drm.c

index 8863644024b78b71d97451d9f6f9407c9c551fe3..e893c53624024751930f51c28517546d7fc7cb9d 100644 (file)
@@ -636,7 +636,8 @@ int nouveau_pmops_resume(struct device *dev)
                nouveau_fbcon_set_suspend(drm_dev, 0);
 
        nouveau_fbcon_zfill_all(drm_dev);
-       nouveau_display_resume(drm_dev);
+       if (drm_dev->mode_config.num_crtc)
+               nouveau_display_resume(drm_dev);
        nv_suspend_set_printk_level(NV_DBG_DEBUG);
        return 0;
 }
@@ -671,7 +672,8 @@ static int nouveau_pmops_thaw(struct device *dev)
        if (drm_dev->mode_config.num_crtc)
                nouveau_fbcon_set_suspend(drm_dev, 0);
        nouveau_fbcon_zfill_all(drm_dev);
-       nouveau_display_resume(drm_dev);
+       if (drm_dev->mode_config.num_crtc)
+               nouveau_display_resume(drm_dev);
        nv_suspend_set_printk_level(NV_DBG_DEBUG);
        return 0;
 }
@@ -906,7 +908,8 @@ static int nouveau_pmops_runtime_resume(struct device *dev)
        pci_set_master(pdev);
 
        ret = nouveau_do_resume(drm_dev);
-       nouveau_display_resume(drm_dev);
+       if (drm_dev->mode_config.num_crtc)
+               nouveau_display_resume(drm_dev);
        drm_kms_helper_poll_enable(drm_dev);
        /* do magic */
        nv_mask(device, 0x88488, (1 << 25), (1 << 25));