> Date: Sat, 14 Nov 2015 14:36:11 +0100
> From: Lubos Boucek <[email protected]>
> 
> trace
> -----
> rw_enter_write()
> drm_modeset_lock_all()
> radeon_driver_lastclose_kms()
> drm_lastclose()
> drm_detach()
> config_detach()
> radeondrm_detach_kms()
> config_detach()
> radeondrm_forcedetach()
> radeondrm_attachhook()
> dohooks()
> main()

Does the diff below fix the problem for you?


Index: radeon_kms.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/radeon/radeon_kms.c,v
retrieving revision 1.42
diff -u -p -r1.42 radeon_kms.c
--- radeon_kms.c        27 Sep 2015 16:13:23 -0000      1.42
+++ radeon_kms.c        14 Nov 2015 14:14:11 -0000
@@ -1091,13 +1091,16 @@ int radeon_driver_firstopen_kms(struct d
 void radeon_driver_lastclose_kms(struct drm_device *dev)
 {
        struct radeon_device *rdev = dev->dev_private;
+       struct drm_fb_helper *fb_helper = (void *)rdev->mode_info.rfbdev;
 
 #ifdef __sparc64__
        fbwscons_setcolormap(&rdev->sf, radeondrm_setcolor);
 #endif
-       drm_modeset_lock_all(dev);
-       drm_fb_helper_restore_fbdev_mode((void *)rdev->mode_info.rfbdev);
-       drm_modeset_unlock_all(dev);
+       if (rdev->mode_info.mode_config_initialized) {
+               drm_modeset_lock_all(dev);
+               drm_fb_helper_restore_fbdev_mode(fb_helper);
+               drm_modeset_unlock_all(dev);
+       }
 #ifdef notyet
        vga_switcheroo_process_delayed_switch();
 #endif

Reply via email to