From 70739e817b2d64bc020ea491f23a3574bdb6155e Mon Sep 17 00:00:00 2001 From: Bryce Harrington Date: Tue, 19 Mar 2013 12:12:45 -0700 Subject: [PATCH] xfree86: Fix race condition failure opening drm. If other processes have had drm open previously, xserver may attempt to open the device too early and fail, with xserver error exit "Cannot run in framebuffer mode" or Xorg.0.log messages about "setversion 1.4 failed". In this situation, we're receiving back -EACCES from libdrm. To address this we need to re-set ourselves as the drm master, and keep trying to set the interface until it works (or until we give up). See https://bugs.launchpad.net/ubuntu/+source/libdrm/+bug/982889 Signed-off-by: Bryce Harrington Reviewed-by: Chris Wilson Signed-off-by: Keith Packard --- hw/xfree86/os-support/linux/lnx_platform.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/xfree86/os-support/linux/lnx_platform.c b/hw/xfree86/os-support/linux/lnx_platform.c index 10c8ecf58..977d59049 100644 --- a/hw/xfree86/os-support/linux/lnx_platform.c +++ b/hw/xfree86/os-support/linux/lnx_platform.c @@ -43,8 +43,14 @@ get_drm_info(struct OdevAttributes *attribs, char *path) if (tries > 1) LogMessage(X_INFO, "setversion 1.4 succeeded on try #%d\n", tries); break; + } else if (err != -EACCES) { + break; } + usleep(10000); + + if (!drmSetMaster(fd)) + LogMessage(X_INFO, "drmSetMaster succeeded\n"); } if (err) { ErrorF("setversion 1.4 failed: %s\n", strerror(-err));