SOURCES: libdrm-make-dri-perms-okay.patch (NEW), libdrm-2.4.0-no-bc.patch (...
gotar
gotar at pld-linux.org
Sat Sep 6 21:39:08 CEST 2008
Author: gotar Date: Sat Sep 6 19:39:08 2008 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- from FC
---- Files affected:
SOURCES:
libdrm-make-dri-perms-okay.patch (NONE -> 1.1) (NEW), libdrm-2.4.0-no-bc.patch (NONE -> 1.1) (NEW), libdrm-2.4.0-no-freaking-mknod.patch (NONE -> 1.1) (NEW), libdrm-wait-udev.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/libdrm-make-dri-perms-okay.patch
diff -u /dev/null SOURCES/libdrm-make-dri-perms-okay.patch:1.1
--- /dev/null Sat Sep 6 21:39:09 2008
+++ SOURCES/libdrm-make-dri-perms-okay.patch Sat Sep 6 21:39:02 2008
@@ -0,0 +1,12 @@
+diff -up libdrm-20080303/libdrm/xf86drm.h.da libdrm-20080303/libdrm/xf86drm.h
+--- libdrm-20080303/libdrm/xf86drm.h.da 2008-03-19 15:26:31.000000000 +1000
++++ libdrm-20080303/libdrm/xf86drm.h 2008-03-19 15:26:46.000000000 +1000
+@@ -45,7 +45,7 @@
+ /* Default /dev/dri directory permissions 0755 */
+ #define DRM_DEV_DIRMODE \
+ (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
+-#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
++#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
+
+ #define DRM_DIR_NAME "/dev/dri"
+ #define DRM_DEV_NAME "%s/card%d"
================================================================
Index: SOURCES/libdrm-2.4.0-no-bc.patch
diff -u /dev/null SOURCES/libdrm-2.4.0-no-bc.patch:1.1
--- /dev/null Sat Sep 6 21:39:10 2008
+++ SOURCES/libdrm-2.4.0-no-bc.patch Sat Sep 6 21:39:02 2008
@@ -0,0 +1,54 @@
+diff -up libdrm-20080811/libdrm/xf86drm.c.jx libdrm-20080811/libdrm/xf86drm.c
+--- libdrm-20080811/libdrm/xf86drm.c.jx 2008-08-11 13:48:47.000000000 -0400
++++ libdrm-20080811/libdrm/xf86drm.c 2008-08-11 15:12:02.000000000 -0400
+@@ -393,11 +393,6 @@ int drmAvailable(void)
+ int fd;
+
+ if ((fd = drmOpenMinor(0, 1)) < 0) {
+-#ifdef __linux__
+- /* Try proc for backward Linux compatibility */
+- if (!access("/proc/dri/0", R_OK))
+- return 1;
+-#endif
+ return 0;
+ }
+
+@@ -516,38 +511,6 @@ static int drmOpenByName(const char *nam
+ }
+ }
+
+-#ifdef __linux__
+- /* Backward-compatibility /proc support */
+- for (i = 0; i < 8; i++) {
+- char proc_name[64], buf[512];
+- char *driver, *pt, *devstring;
+- int retcode;
+-
+- sprintf(proc_name, "/proc/dri/%d/name", i);
+- if ((fd = open(proc_name, 0, 0)) >= 0) {
+- retcode = read(fd, buf, sizeof(buf)-1);
+- close(fd);
+- if (retcode) {
+- buf[retcode-1] = '\0';
+- for (driver = pt = buf; *pt && *pt != ' '; ++pt)
+- ;
+- if (*pt) { /* Device is next */
+- *pt = '\0';
+- if (!strcmp(driver, name)) { /* Match */
+- for (devstring = ++pt; *pt && *pt != ' '; ++pt)
+- ;
+- if (*pt) { /* Found busid */
+- return drmOpenByBusid(++pt);
+- } else { /* No busid */
+- return drmOpenDevice(strtol(devstring, NULL, 0),i);
+- }
+- }
+- }
+- }
+- }
+- }
+-#endif
+-
+ return -1;
+ }
+
================================================================
Index: SOURCES/libdrm-2.4.0-no-freaking-mknod.patch
diff -u /dev/null SOURCES/libdrm-2.4.0-no-freaking-mknod.patch:1.1
--- /dev/null Sat Sep 6 21:39:10 2008
+++ SOURCES/libdrm-2.4.0-no-freaking-mknod.patch Sat Sep 6 21:39:02 2008
@@ -0,0 +1,94 @@
+diff -up libdrm-2.4.0/libdrm/xf86drm.c.mknod libdrm-2.4.0/libdrm/xf86drm.c
+--- libdrm-2.4.0/libdrm/xf86drm.c.mknod 2007-10-30 20:10:10.000000000 -0400
++++ libdrm-2.4.0/libdrm/xf86drm.c 2007-11-12 19:26:12.000000000 -0500
+@@ -266,64 +266,12 @@ static int drmMatchBusID(const char *id1
+ */
+ static int drmOpenDevice(long dev, int minor)
+ {
+- stat_t st;
+ char buf[64];
+ int fd;
+- mode_t devmode = DRM_DEV_MODE, serv_mode;
+- int isroot = !geteuid();
+- uid_t user = DRM_DEV_UID;
+- gid_t group = DRM_DEV_GID, serv_group;
+
+ sprintf(buf, DRM_DEV_NAME, DRM_DIR_NAME, minor);
+ drmMsg("drmOpenDevice: node name is %s\n", buf);
+
+- if (drm_server_info) {
+- drm_server_info->get_perms(&serv_group, &serv_mode);
+- devmode = serv_mode ? serv_mode : DRM_DEV_MODE;
+- devmode &= ~(S_IXUSR|S_IXGRP|S_IXOTH);
+- group = (serv_group >= 0) ? serv_group : DRM_DEV_GID;
+- }
+-
+- if (stat(DRM_DIR_NAME, &st)) {
+- if (!isroot)
+- return DRM_ERR_NOT_ROOT;
+- mkdir(DRM_DIR_NAME, DRM_DEV_DIRMODE);
+- chown(DRM_DIR_NAME, 0, 0); /* root:root */
+- chmod(DRM_DIR_NAME, DRM_DEV_DIRMODE);
+- }
+-
+- /* Check if the device node exists and create it if necessary. */
+- if (stat(buf, &st)) {
+- if (!isroot)
+- return DRM_ERR_NOT_ROOT;
+- remove(buf);
+- mknod(buf, S_IFCHR | devmode, dev);
+- }
+-
+- if (drm_server_info) {
+- chown(buf, user, group);
+- chmod(buf, devmode);
+- }
+-
+- fd = open(buf, O_RDWR, 0);
+- drmMsg("drmOpenDevice: open result is %d, (%s)\n",
+- fd, fd < 0 ? strerror(errno) : "OK");
+- if (fd >= 0)
+- return fd;
+-
+- /* Check if the device node is not what we expect it to be, and recreate it
+- * and try again if so.
+- */
+- if (st.st_rdev != dev) {
+- if (!isroot)
+- return DRM_ERR_NOT_ROOT;
+- remove(buf);
+- mknod(buf, S_IFCHR | devmode, dev);
+- if (drm_server_info) {
+- chown(buf, user, group);
+- chmod(buf, devmode);
+- }
+- }
+ fd = open(buf, O_RDWR, 0);
+ drmMsg("drmOpenDevice: open result is %d, (%s)\n",
+ fd, fd < 0 ? strerror(errno) : "OK");
+@@ -331,7 +279,6 @@ static int drmOpenDevice(long dev, int m
+ return fd;
+
+ drmMsg("drmOpenDevice: Open failed\n");
+- remove(buf);
+ return -errno;
+ }
+
+diff -up libdrm-2.4.0/libdrm/xf86drm.h.mknod libdrm-2.4.0/libdrm/xf86drm.h
+--- libdrm-2.4.0/libdrm/xf86drm.h.mknod 2007-07-19 00:27:52.000000000 -0400
++++ libdrm-2.4.0/libdrm/xf86drm.h 2007-11-12 19:27:51.000000000 -0500
+@@ -39,14 +39,6 @@
+ #include <stdint.h>
+ #include <drm.h>
+
+- /* Defaults, if nothing set in xf86config */
+-#define DRM_DEV_UID 0
+-#define DRM_DEV_GID 0
+-/* Default /dev/dri directory permissions 0755 */
+-#define DRM_DEV_DIRMODE \
+- (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH)
+-#define DRM_DEV_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
+-
+ #define DRM_DIR_NAME "/dev/dri"
+ #define DRM_DEV_NAME "%s/card%d"
+ #define DRM_PROC_NAME "/proc/dri/" /* For backward Linux compatibility */
================================================================
Index: SOURCES/libdrm-wait-udev.patch
diff -u /dev/null SOURCES/libdrm-wait-udev.patch:1.1
--- /dev/null Sat Sep 6 21:39:11 2008
+++ SOURCES/libdrm-wait-udev.patch Sat Sep 6 21:39:03 2008
@@ -0,0 +1,68 @@
+diff --git a/configure.ac b/configure.ac
+index 1cf877d..0cf0974 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 150dd5f..5d8819a 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",
================================================================
More information about the pld-cvs-commit
mailing list