drm/vmwgfx: remove ->firstopen callback
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 8 Aug 2013 13:41:14 +0000 (15:41 +0200)
committerDave Airlie <airlied@redhat.com>
Mon, 19 Aug 2013 04:28:07 +0000 (14:28 +1000)
So if we survey kms drivers there's a bunch of things they commonly do
in ->lastclose
- delayed processing of vga switcheroo requests (i915, nouveau,
  radeon)
- force-restoring the fbcon (most)
- resetting a bunch properties to make fbcon work better (omap)
- disabling all outputs (vmwgfx)

In short besides the semantically important vga switcheroo stuff they
all try very hard to keep fbcon working in case X dies.

But none of them try to not do this at driver unload time safe for
vmwgfx, and digging through logs I couldn't find any reason for why
vmwgfx is special.

Since ->firstopen has lots of potential for abuse with kms drivers
(like delaying driver setup to pamper over races in the load sequence)
it's imo very much worth it to remove this logic so that we can
stop using the ->firstopen callback for kms drivers.

Also module unloading is rather a debug feature and developers should
know how to restore the display to a sane configuration.

Cc: Jakob Bornecrantz <jakob@vmware.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h

index 2dd1919..0dcfa6b 100644 (file)
@@ -795,29 +795,12 @@ static long vmw_unlocked_ioctl(struct file *filp, unsigned int cmd,
        return drm_ioctl(filp, cmd, arg);
 }
 
-static int vmw_firstopen(struct drm_device *dev)
-{
-       struct vmw_private *dev_priv = vmw_priv(dev);
-       dev_priv->is_opened = true;
-
-       return 0;
-}
-
 static void vmw_lastclose(struct drm_device *dev)
 {
-       struct vmw_private *dev_priv = vmw_priv(dev);
        struct drm_crtc *crtc;
        struct drm_mode_set set;
        int ret;
 
-       /**
-        * Do nothing on the lastclose call from drm_unload.
-        */
-
-       if (!dev_priv->is_opened)
-               return;
-
-       dev_priv->is_opened = false;
        set.x = 0;
        set.y = 0;
        set.fb = NULL;
@@ -1131,7 +1114,6 @@ static struct drm_driver driver = {
        DRIVER_MODESET,
        .load = vmw_driver_load,
        .unload = vmw_driver_unload,
-       .firstopen = vmw_firstopen,
        .lastclose = vmw_lastclose,
        .irq_preinstall = vmw_irq_preinstall,
        .irq_postinstall = vmw_irq_postinstall,
index 13aeda7..150ec64 100644 (file)
@@ -324,7 +324,6 @@ struct vmw_private {
         */
 
        bool stealth;
-       bool is_opened;
        bool enable_fb;
 
        /**