Mesa (master): st/xorg: Acquire/ drop DRM master in order to work with multiple servers.

Michel Dänzer daenzer at kemper.freedesktop.org
Wed Aug 12 17:20:48 UTC 2009


Module: Mesa
Branch: master
Commit: 5eeb44f3983dfda2f2707783be12806da795cbcd
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5eeb44f3983dfda2f2707783be12806da795cbcd

Author: Michel Dänzer <daenzer at vmware.com>
Date:   Wed Aug 12 19:11:11 2009 +0200

st/xorg: Acquire/drop DRM master in order to work with multiple servers.

---

 src/gallium/state_trackers/xorg/xorg_driver.c |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/src/gallium/state_trackers/xorg/xorg_driver.c b/src/gallium/state_trackers/xorg/xorg_driver.c
index d68fd37..53d1a33 100644
--- a/src/gallium/state_trackers/xorg/xorg_driver.c
+++ b/src/gallium/state_trackers/xorg/xorg_driver.c
@@ -633,6 +633,10 @@ LeaveVT(int scrnIndex, int flags)
 
     RestoreHWState(pScrn);
 
+    if (drmDropMaster(ms->fd))
+	xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+		   "drmDropMaster failed: %s\n", strerror(errno));
+
     pScrn->vtSema = FALSE;
 }
 
@@ -645,6 +649,17 @@ EnterVT(int scrnIndex, int flags)
     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
     modesettingPtr ms = modesettingPTR(pScrn);
 
+    if (drmSetMaster(ms->fd)) {
+	if (errno == EINVAL) {
+	    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+		       "drmSetMaster failed: 2.6.29 or newer kernel required for "
+		       "multi-server DRI\n");
+	} else {
+	    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+		       "drmSetMaster failed: %s\n", strerror(errno));
+	}
+    }
+
     /*
      * Only save state once per server generation since that's what most
      * drivers do.  Could change this to save state at each VT enter.




More information about the mesa-commit mailing list