diff options
author | Michel Dänzer <mdaenzer@redhat.com> | 2019-09-18 12:55:45 +0200 |
---|---|---|
committer | Michel Dänzer <michel@daenzer.net> | 2019-09-18 12:55:45 +0200 |
commit | 5b8bc9fc505c551dcd9b0ed5ab835a49fa4f9fda (patch) | |
tree | cddcca10f72abea4322d26d7cc4d7bdef1f3f94e | |
parent | e6fce59a071220967fcd4e2c9e4a262c72870761 (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.c | 10 |
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); |