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