amdgpu: Only destroy fbdev framebuffer if it was initialized
authorMichel Dänzer <michel.daenzer@amd.com>
Mon, 11 Sep 2017 08:04:41 +0000 (17:04 +0900)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 13 Sep 2017 16:10:11 +0000 (12:10 -0400)
Fixes crash when trying to unload the amdgpu module before the fbdev
framebuffer was initialized, which can happen since the DRM fbdev helper
code supports deferred setup.

Acked-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c

index b6cb276..562930b 100644 (file)
@@ -303,10 +303,10 @@ static int amdgpu_fbdev_destroy(struct drm_device *dev, struct amdgpu_fbdev *rfb
        if (rfb->obj) {
                amdgpufb_destroy_pinned_object(rfb->obj);
                rfb->obj = NULL;
+               drm_framebuffer_unregister_private(&rfb->base);
+               drm_framebuffer_cleanup(&rfb->base);
        }
        drm_fb_helper_fini(&rfbdev->helper);
-       drm_framebuffer_unregister_private(&rfb->base);
-       drm_framebuffer_cleanup(&rfb->base);
 
        return 0;
 }