[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xorg-server: Changes to 'ubuntu'



 debian/patches/drm_device_keep_trying.patch |  132 ++++++++++++++++------------
 1 file changed, 76 insertions(+), 56 deletions(-)

New commits:
commit fc93274e88fa0da6d7941be5133d686995e36bfa
Author: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Date:   Wed Mar 20 14:03:30 2013 +0100

    try a different approach for drm_device_keep_trying

diff --git a/debian/patches/drm_device_keep_trying.patch b/debian/patches/drm_device_keep_trying.patch
index 14dafa9..cd49c39 100644
--- a/debian/patches/drm_device_keep_trying.patch
+++ b/debian/patches/drm_device_keep_trying.patch
@@ -16,74 +16,94 @@ Signed-off-by: Bryce Harrington <bryce@canonical.com>
  hw/xfree86/os-support/linux/lnx_platform.c |   29 +++++++++++++++++++++++++---
  1 file changed, 26 insertions(+), 3 deletions(-)
 
---- a/hw/xfree86/os-support/linux/lnx_platform.c
-+++ b/hw/xfree86/os-support/linux/lnx_platform.c
-@@ -7,6 +7,7 @@
- #include <xf86drm.h>
- #include <fcntl.h>
- #include <unistd.h>
-+#include <errno.h>
+diff --git a/config/udev.c b/config/udev.c
+index 454838f..af133d2 100644
+--- a/config/udev.c
++++ b/config/udev.c
+@@ -98,7 +98,7 @@ device_added(struct udev_device *udev_device)
+         if (strncmp(sysname, "card", 4) != 0)
+             return;
  
- /* Linux platform device support */
- #include "xf86_OSproc.h"
-@@ -17,23 +18,54 @@
+-        LogMessage(X_INFO, "config/udev: Adding drm device (%s)\n", path);
++        LogMessage(X_INFO, "config/udev: Adding drm device (%s) %s %s\n", path, sysname, syspath);
  
- #include "hotplug.h"
+         config_udev_odev_setup_attribs(path, syspath, NewGPUDeviceRequest);
+         return;
+@@ -267,7 +267,7 @@ device_removed(struct udev_device *device)
  
-+static Bool get_drm_master(int fd)
-+{
-+    int ret, tries = 400;
-+
-+    LogMessage(X_INFO, "spinning!\n");
-+
-+    while (tries--) {
-+        if (drmSetMaster(fd) >= 0)
-+            return TRUE;
-+
-+        if (errno != EINVAL)
-+            break;
+         if (strncmp(sysname,"card", 4) != 0)
+             return;
+-        ErrorF("removing GPU device %s %d\n", syspath, path);
++        ErrorF("removing GPU device %s %s\n", syspath, path);
+         if (!path)
+             return;
+ 
+@@ -437,6 +437,16 @@ config_udev_odev_setup_attribs(const char *path, const char *syspath,
+     if (ret == FALSE)
+         goto fail;
+ 
++    if (strstr(syspath, "/devices/pci")) {
++        const char *end = strstr(syspath, "/drm/card");
++        if (end && end - 12 > syspath) {
++            char pci_str[17] = "pci:";
 +
-+        usleep(10000);
++            strncpy(pci_str + 4, end - 12, 12);
++            ret = config_odev_add_attribute(attribs, ODEV_ATTRIB_BUSID, pci_str);
++        }
 +    }
-+    return FALSE;
-+}
 +
- static Bool
- get_drm_info(struct OdevAttributes *attribs, char *path)
- {
-     drmSetVersion sv;
-     char *buf;
-     int fd;
-+    int err = 0;
+     /* ownership of attribs is passed to probe layer */
+     probe_callback(attribs);
+     return TRUE;
+diff --git a/hw/xfree86/os-support/linux/lnx_platform.c b/hw/xfree86/os-support/linux/lnx_platform.c
+index 76f5583..11bb9fc 100644
+--- a/hw/xfree86/os-support/linux/lnx_platform.c
++++ b/hw/xfree86/os-support/linux/lnx_platform.c
+@@ -17,36 +17,6 @@
  
-     fd = open(path, O_RDWR, O_CLOEXEC);
-     if (fd == -1)
-         return FALSE;
+ #include "hotplug.h"
  
+-static Bool
+-get_drm_info(struct OdevAttributes *attribs, char *path)
+-{
+-    drmSetVersion sv;
+-    char *buf;
+-    int fd;
+-
+-    fd = open(path, O_RDWR, O_CLOEXEC);
+-    if (fd == -1)
+-        return FALSE;
+-
 -    sv.drm_di_major = 1;
 -    sv.drm_di_minor = 4;
 -    sv.drm_dd_major = -1;       /* Don't care */
 -    sv.drm_dd_minor = -1;       /* Don't care */
 -    if (drmSetInterfaceVersion(fd, &sv)) {
 -        ErrorF("setversion 1.4 failed\n");
-+    while (1) {
-+        sv.drm_di_major = 1;
-+        sv.drm_di_minor = 4;
-+        sv.drm_dd_major = -1;       /* Don't care */
-+        sv.drm_dd_minor = -1;       /* Don't care */
-+
-+        err = drmSetInterfaceVersion(fd, &sv);
-+        if (!err)
-+            break;
-+
-+        if (err == -EACCES) {
-+            if (get_drm_master(fd))
-+                continue;
-+            ErrorF("drmSetMaster failed with -%i(%m)\n", errno);
-+        } else
-+            ErrorF("drmSetInterfaceVersion failed with %i(%s)\n", err, strerror(-err));
-+
-+        close(fd);
-         return FALSE;
-     }
+-        return FALSE;
+-    }
+-
+-    xf86_add_platform_device(attribs);
+-
+-    buf = drmGetBusid(fd);
+-    xf86_add_platform_device_attrib(xf86_num_platform_devices - 1,
+-                                    ODEV_ATTRIB_BUSID, buf);
+-    drmFreeBusid(buf);
+-    close(fd);
+-    return TRUE;
+-}
+-
+ Bool
+ xf86PlatformDeviceCheckBusID(struct xf86_platform_device *device, const char *busid)
+ {
+@@ -119,10 +89,6 @@ xf86PlatformDeviceProbe(struct OdevAttributes *attribs)
+     LogMessage(X_INFO, "config/udev: Adding drm device (%s)\n",
+                path);
+ 
+-    ret = get_drm_info(attribs, path);
+-    if (ret == FALSE)
+-        goto out_free;
+-
+     return;
  
+ out_free:


Reply to: