]> git.proxmox.com Git - mirror_ubuntu-disco-kernel.git/commitdiff
drm/i915: Do fbdev fini first during unload
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 6 Nov 2015 13:08:32 +0000 (15:08 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 11 Nov 2015 11:34:47 +0000 (13:34 +0200)
We set up fbdev last during load, so doing the fbdev cleanup should be
first.

We weren't supposed to drop the init power during driver unload, but since
the fbdev teardown happened after intel_power_domains_fini() that could
have happened due in one of two ways. First it could have happened
during the modeset caused by normal fbdev cleanup. But in addition it
could have happened already via the intel_fbdev_initial_config() since
that is executed asynhronously, and the async_synchronize_full() was
done during fbdev cleanup, after intel_power_domains_fini(). All of
that got eliminated by
commit 292b990e86abc ("drm/i915: Update power domains on readout.")
since we now drop the init power synchronously during driver load.

So there is no real bug wrt. the init power anymore, but still it seems
better to do the fbdev cleanup first, before we've potentially cleaned
up something else important.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1446815313-9490-3-git-send-email-ville.syrjala@linux.intel.com
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
drivers/gpu/drm/i915/i915_dma.c

index ea8b64b91e34a784342ab89e5c5d6b4157ed1be9..561ad8d537bf2cfde202e489d02e18881abc4485 100644 (file)
@@ -1166,6 +1166,8 @@ int i915_driver_unload(struct drm_device *dev)
        struct drm_i915_private *dev_priv = dev->dev_private;
        int ret;
 
+       intel_fbdev_fini(dev);
+
        i915_audio_component_cleanup(dev_priv);
 
        ret = i915_gem_suspend(dev);
@@ -1188,8 +1190,6 @@ int i915_driver_unload(struct drm_device *dev)
 
        acpi_video_unregister();
 
-       intel_fbdev_fini(dev);
-
        drm_vblank_cleanup(dev);
 
        intel_modeset_cleanup(dev);