vmwgfx: Fix display system init & close functions

Make sure we null the display private, make sure we catch and
handle vblank failing to init and don't call vblank_cleanup if
we haven't initialized the display system.

Signed-off-by: Jakob Bornecrantz <jakob@vmware.com>
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
index 347e406..319516f 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
@@ -545,6 +545,7 @@
 	drm_vblank_cleanup(dev);
 err_free:
 	kfree(dev_priv->sou_priv);
+	dev_priv->sou_priv = NULL;
 err_no_mem:
 	return ret;
 }
@@ -553,10 +554,11 @@
 {
 	struct drm_device *dev = dev_priv->dev;
 
-	drm_vblank_cleanup(dev);
 	if (!dev_priv->sou_priv)
 		return -ENOSYS;
 
+	drm_vblank_cleanup(dev);
+
 	if (!list_empty(&dev_priv->sou_priv->active))
 		DRM_ERROR("Still have active outputs when unloading driver");