diff options
author | Dave Airlie <airlied@linux.ie> | 2008-08-24 16:54:43 +1000 |
---|---|---|
committer | Dave Airlie <airlied@linux.ie> | 2008-08-24 16:54:47 +1000 |
commit | 9101a0205c897fea28e6a3d875111a83ad7f7732 (patch) | |
tree | c10c1b54f5ea1e2605555e56513501350cc5feee | |
parent | 0da66c27fa2aabdbaf4c003ba3712a61253d7ffe (diff) |
libdrm: add udev support.
This patch allows you to --enable-udev, and will avoid having libdrm
make device nodes. If you are using udev, you should really --enable-udev
your libdrm.
-rw-r--r-- | configure.ac | 7 | ||||
-rw-r--r-- | libdrm/xf86drm.c | 25 |
2 files changed, 32 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index 1cf877d5..0cf09744 100644 --- a/configure.ac +++ b/configure.ac @@ -34,6 +34,9 @@ AC_SYS_LARGEFILE pkgconfigdir=${libdir}/pkgconfig AC_SUBST(pkgconfigdir) +AC_ARG_ENABLE(udev, AS_HELP_STRING([--enable-udev], + [Enable support for using udev instead of mknod (default: disabled)]), + [UDEV=$enableval], [UDEV=no]) dnl =========================================================================== @@ -101,6 +104,10 @@ AC_CACHE_CHECK([for supported warning flags], libdrm_cv_warn_cflags, [ AC_MSG_CHECKING([which warning flags were supported])]) WARN_CFLAGS="$libdrm_cv_warn_cflags" +if test "x$UDEV" = xyes; then + AC_DEFINE(UDEV, 1, [Have UDEV support]) +fi + AC_SUBST(WARN_CFLAGS) AC_OUTPUT([ Makefile diff --git a/libdrm/xf86drm.c b/libdrm/xf86drm.c index 7202c8d7..c36f1964 100644 --- a/libdrm/xf86drm.c +++ b/libdrm/xf86drm.c @@ -297,6 +297,7 @@ static int drmOpenDevice(long dev, int minor) group = (serv_group >= 0) ? serv_group : DRM_DEV_GID; } +#if !defined(UDEV) if (stat(DRM_DIR_NAME, &st)) { if (!isroot) return DRM_ERR_NOT_ROOT; @@ -317,6 +318,30 @@ static int drmOpenDevice(long dev, int minor) chown(buf, user, group); chmod(buf, devmode); } +#else + /* if we modprobed then wait for udev */ + { + int udev_count = 0; +wait_for_udev: + if (stat(DRM_DIR_NAME, &st)) { + usleep(20); + udev_count++; + + if (udev_count == 50) + return -1; + goto wait_for_udev; + } + + if (stat(buf, &st)) { + usleep(20); + udev_count++; + + if (udev_count == 50) + return -1; + goto wait_for_udev; + } + } +#endif fd = open(buf, O_RDWR, 0); drmMsg("drmOpenDevice: open result is %d, (%s)\n", |