Index: /trunk/src/VBox/Additions/x11/undefined_xorg
===================================================================
--- /trunk/src/VBox/Additions/x11/undefined_xorg	(revision 53425)
+++ /trunk/src/VBox/Additions/x11/undefined_xorg	(revision 53426)
@@ -29,4 +29,6 @@
 drmGetVersion
 drmIoctl
+drmModeGetResources
+drmModeFreeResources
 drmSetMaster
 ___errno
Index: /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c	(revision 53425)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c	(revision 53426)
@@ -115,4 +115,5 @@
 #ifdef VBOX_DRI
 # include "xf86drm.h"
+# include "xf86drmMode.h"
 #endif
 
@@ -1201,11 +1202,8 @@
         DRILock(xf86ScrnToScreen(pScrn), 0);
 #elif defined(VBOX_DRI)  /* DRI2 */
-    /* Expected failure mode: KMS not supported, drmDropMaster() fails. */
-    if (pVBox->drmFD < 0 || drmDropMaster(pVBox->drmFD) < 0)
-        VBOXRestoreMode(pScrn);
-#endif
-#if !defined(VBOX_DRI) || defined(VBOX_DRI_OLD)
+    if (pVBox->drmFD >= 0)
+        drmDropMaster(pVBox->drmFD);
+#endif
     VBOXRestoreMode(pScrn);
-#endif
 #ifdef SET_HAVE_VT_PROPERTY
     updateHasVTProperty(pScrn, FALSE);
@@ -1396,6 +1394,19 @@
     VBOXPtr pVBox = VBOXGetRec(pScrn);
     vgaRegPtr vgaReg;
+#ifdef VBOX_DRI
+    drmModeResPtr pRes;
+#endif
 
     TRACE_ENTRY();
+#ifdef VBOX_DRI
+    /* Do not try to re-set the VGA state if a mode-setting driver is loaded. */
+    if (   pVBox->drmFD >= 0
+        && LoaderSymbol("drmModeGetResources") != NULL
+        && (pRes == drmModeGetResources(pVBox->drmFD)) != NULL)
+    {
+        drmModeFreeResources(pRes);
+        return;
+    }
+#endif
     vgaReg = &VGAHWPTR(pScrn)->SavedReg;
     vgaHWRestore(pScrn, vgaReg, VGA_SR_ALL);
