summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <mdaenzer@redhat.com>2019-09-18 12:55:45 +0200
committerMichel Dänzer <michel@daenzer.net>2019-09-18 12:55:45 +0200
commit5b8bc9fc505c551dcd9b0ed5ab835a49fa4f9fda (patch)
treecddcca10f72abea4322d26d7cc4d7bdef1f3f94e
parente6fce59a071220967fcd4e2c9e4a262c72870761 (diff)
Don't set up black scanout buffer if LeaveVT is called from CloseScreen
Avoids a crash described in https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/merge_requests/43#note_223718 Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--src/amdgpu_kms.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index 3280972..6263bd7 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -2267,6 +2267,12 @@ void AMDGPULeaveVT_KMS(ScrnInfoPtr pScrn)
unsigned w = 0, h = 0;
int i;
+ /* If we're called from CloseScreen, trying to clear the black
+ * scanout BO will likely crash and burn
+ */
+ if (!pScreen->GCperDepth[0])
+ goto hide_cursors;
+
/* Compute maximum scanout dimensions of active CRTCs */
for (i = 0; i < xf86_config->num_crtc; i++) {
crtc = xf86_config->crtc[i];
@@ -2339,8 +2345,10 @@ void AMDGPULeaveVT_KMS(ScrnInfoPtr pScrn)
info->pixel_bytes * pScrn->virtualY);
}
- TimerSet(NULL, 0, 1000, cleanup_black_fb, pScreen);
+ if (pScreen->GCperDepth[0])
+ TimerSet(NULL, 0, 1000, cleanup_black_fb, pScreen);
+ hide_cursors:
xf86_hide_cursors(pScrn);
amdgpu_drop_drm_master(pScrn);