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