drm_kms_helper_poll_fini(dev);
        mutex_lock(&dev->struct_mutex);
 
-       intel_fbdev_fini(dev);
-
        list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
                /* Skip inactive CRTCs */
                if (!crtc->fb)
 
        .fb_probe = intel_fb_find_or_create_single,
 };
 
-static int intel_fbdev_destroy(struct drm_device *dev,
-                              struct intel_fbdev *ifbdev)
+static void intel_fbdev_destroy(struct drm_device *dev,
+                               struct intel_fbdev *ifbdev)
 {
        struct fb_info *info;
        struct intel_framebuffer *ifb = &ifbdev->ifb;
 
        drm_framebuffer_cleanup(&ifb->base);
        if (ifb->obj)
-               drm_gem_object_unreference(ifb->obj);
-
-       return 0;
+               drm_gem_object_unreference_unlocked(ifb->obj);
 }
 
 int intel_fbdev_init(struct drm_device *dev)