提交 0faa4a87 编写于 作者: D Daniel Vetter 提交者: Dave Airlie

drm/vmwgfx: remove ->firstopen callback

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: NDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: NDave Airlie <airlied@redhat.com>
上级 b5dc0d10
...@@ -795,29 +795,12 @@ static long vmw_unlocked_ioctl(struct file *filp, unsigned int cmd, ...@@ -795,29 +795,12 @@ static long vmw_unlocked_ioctl(struct file *filp, unsigned int cmd,
return drm_ioctl(filp, cmd, arg); 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) static void vmw_lastclose(struct drm_device *dev)
{ {
struct vmw_private *dev_priv = vmw_priv(dev);
struct drm_crtc *crtc; struct drm_crtc *crtc;
struct drm_mode_set set; struct drm_mode_set set;
int ret; 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.x = 0;
set.y = 0; set.y = 0;
set.fb = NULL; set.fb = NULL;
...@@ -1131,7 +1114,6 @@ static struct drm_driver driver = { ...@@ -1131,7 +1114,6 @@ static struct drm_driver driver = {
DRIVER_MODESET, DRIVER_MODESET,
.load = vmw_driver_load, .load = vmw_driver_load,
.unload = vmw_driver_unload, .unload = vmw_driver_unload,
.firstopen = vmw_firstopen,
.lastclose = vmw_lastclose, .lastclose = vmw_lastclose,
.irq_preinstall = vmw_irq_preinstall, .irq_preinstall = vmw_irq_preinstall,
.irq_postinstall = vmw_irq_postinstall, .irq_postinstall = vmw_irq_postinstall,
......
...@@ -324,7 +324,6 @@ struct vmw_private { ...@@ -324,7 +324,6 @@ struct vmw_private {
*/ */
bool stealth; bool stealth;
bool is_opened;
bool enable_fb; bool enable_fb;
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册