summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_fbdev.c
diff options
context:
space:
mode:
authorChris Wilson2016-06-21 10:16:55 +0200
committerChris Wilson2016-06-21 10:36:56 +0200
commite77018f7618960f7ec0e73e63868514ff16f8ddc (patch)
tree84723f857c24923cddaa7a64db77168b7585c858 /drivers/gpu/drm/i915/intel_fbdev.c
parentdrm/i915/fbdev: Limit the global async-domain synchronization (diff)
downloadkernel-qcow2-linux-e77018f7618960f7ec0e73e63868514ff16f8ddc.tar.gz
kernel-qcow2-linux-e77018f7618960f7ec0e73e63868514ff16f8ddc.tar.xz
kernel-qcow2-linux-e77018f7618960f7ec0e73e63868514ff16f8ddc.zip
drm/i915/fbdev: Flush mode configuration before lastclose
During lastclose, we call intel_fbdev_restore_mode() to switch back to the fbcon configuration on return to VT. However, if we have not yet finished the asynchronous fbdev initialisation, the current mode will be invalid and trigger WARNs upon application. Serialise with the outstanding initialisation if the first application exits quickly. Note that to hit this in practice requires using an unregistered async_domain as otherwise modprobe will force a full synchronisation prior to init() completing. v2: Reuse comment explaining the +1 by refactoring the wait on fbdev sync in the previous patch. Reported-by: Gustav Fägerlind <gustav.fagerlind@gmail.com> Reported-by: "Li, Weinan Z" <weinan.z.li@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93580 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1466497015-8509-3-git-send-email-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/intel_fbdev.c')
-rw-r--r--drivers/gpu/drm/i915/intel_fbdev.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
index 45a03d87a659..16d73eaa46fb 100644
--- a/drivers/gpu/drm/i915/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/intel_fbdev.c
@@ -840,6 +840,8 @@ void intel_fbdev_restore_mode(struct drm_device *dev)
if (!ifbdev)
return;
+ intel_fbdev_sync(ifbdev);
+
fb_helper = &ifbdev->helper;
ret = drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper);