]> git.pld-linux.org Git - packages/libdrm.git/blame - libdrm-wait-udev.patch
- up to 2.4.9
[packages/libdrm.git] / libdrm-wait-udev.patch
CommitLineData
d24f563e
TP
1diff --git a/configure.ac b/configure.ac
2index 1cf877d..0cf0974 100644
3--- a/configure.ac
4+++ b/configure.ac
5@@ -34,6 +34,9 @@ AC_SYS_LARGEFILE
6
7 pkgconfigdir=${libdir}/pkgconfig
8 AC_SUBST(pkgconfigdir)
9+AC_ARG_ENABLE(udev, AS_HELP_STRING([--enable-udev],
10+ [Enable support for using udev instead of mknod (default: disabled)]),
11+ [UDEV=$enableval], [UDEV=no])
12
13
14 dnl ===========================================================================
15@@ -101,6 +104,10 @@ AC_CACHE_CHECK([for supported warning flags], libdrm_cv_warn_cflags, [
16 AC_MSG_CHECKING([which warning flags were supported])])
17 WARN_CFLAGS="$libdrm_cv_warn_cflags"
18
19+if test "x$UDEV" = xyes; then
20+ AC_DEFINE(UDEV, 1, [Have UDEV support])
21+fi
22+
23 AC_SUBST(WARN_CFLAGS)
24 AC_OUTPUT([
25 Makefile
26diff --git a/libdrm/xf86drm.c b/libdrm/xf86drm.c
27index 150dd5f..5d8819a 100644
28--- a/libdrm/xf86drm.c
29+++ b/libdrm/xf86drm.c
30@@ -297,6 +297,7 @@ static int drmOpenDevice(long dev, int minor)
31 group = (serv_group >= 0) ? serv_group : DRM_DEV_GID;
32 }
33
34+#if !defined(UDEV)
35 if (stat(DRM_DIR_NAME, &st)) {
36 if (!isroot)
37 return DRM_ERR_NOT_ROOT;
38@@ -317,6 +318,30 @@ static int drmOpenDevice(long dev, int minor)
39 chown(buf, user, group);
40 chmod(buf, devmode);
41 }
42+#else
43+ /* if we modprobed then wait for udev */
44+ {
45+ int udev_count = 0;
46+wait_for_udev:
47+ if (stat(DRM_DIR_NAME, &st)) {
48+ usleep(20);
49+ udev_count++;
50+
51+ if (udev_count == 50)
52+ return -1;
53+ goto wait_for_udev;
54+ }
55+
56+ if (stat(buf, &st)) {
57+ usleep(20);
58+ udev_count++;
59+
60+ if (udev_count == 50)
61+ return -1;
62+ goto wait_for_udev;
63+ }
64+ }
65+#endif
66
67 fd = open(buf, O_RDWR, 0);
68 drmMsg("drmOpenDevice: open result is %d, (%s)\n",
This page took 0.082528 seconds and 4 git commands to generate.