]>
Commit | Line | Data |
---|---|---|
d24f563e TP |
1 | diff --git a/configure.ac b/configure.ac |
2 | index 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 | |
26 | diff --git a/libdrm/xf86drm.c b/libdrm/xf86drm.c | |
27 | index 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", |