]> git.pld-linux.org Git - packages/libdrm.git/commitdiff
- from FC
authorTomasz Pala <gotar@pld-linux.org>
Sat, 6 Sep 2008 19:39:03 +0000 (19:39 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    libdrm-2.4.0-no-bc.patch -> 1.1
    libdrm-2.4.0-no-freaking-mknod.patch -> 1.1
    libdrm-make-dri-perms-okay.patch -> 1.1
    libdrm-wait-udev.patch -> 1.1

libdrm-2.4.0-no-bc.patch [new file with mode: 0644]
libdrm-2.4.0-no-freaking-mknod.patch [new file with mode: 0644]
libdrm-make-dri-perms-okay.patch [new file with mode: 0644]
libdrm-wait-udev.patch [new file with mode: 0644]

diff --git a/libdrm-2.4.0-no-bc.patch b/libdrm-2.4.0-no-bc.patch
new file mode 100644 (file)
index 0000000..709c5f3
--- /dev/null
@@ -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;
+ }
diff --git a/libdrm-2.4.0-no-freaking-mknod.patch b/libdrm-2.4.0-no-freaking-mknod.patch
new file mode 100644 (file)
index 0000000..08bee1d
--- /dev/null
@@ -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 */
diff --git a/libdrm-make-dri-perms-okay.patch b/libdrm-make-dri-perms-okay.patch
new file mode 100644 (file)
index 0000000..d9913c4
--- /dev/null
@@ -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"
diff --git a/libdrm-wait-udev.patch b/libdrm-wait-udev.patch
new file mode 100644 (file)
index 0000000..29051ae
--- /dev/null
@@ -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",
This page took 0.201798 seconds and 4 git commands to generate.