xserver: Branch 'server-1.20-branch' - 3 commits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Sep 16 08:52:30 UTC 2020


 config/udev.c                              |   42 +++--------------------------
 hw/xfree86/os-support/linux/lnx_platform.c |   20 ++++++++++++-
 2 files changed, 23 insertions(+), 39 deletions(-)

New commits:
commit af4c84ce8855e84c0ad89b929bc972e884f0b8e3
Author: Olivier Fourdan <ofourdan at redhat.com>
Date:   Tue Sep 8 10:03:33 2020 +0200

    Revert "linux: Make platform device probe less fragile"
    
    This reverts commit 74b7427c41b4e4104af7abf70a996c086d3d7628.
    
    https://gitlab.freedesktop.org/xorg/xserver/-/issues/1068

diff --git a/config/udev.c b/config/udev.c
index 8c6c4b666..3a73189e2 100644
--- a/config/udev.c
+++ b/config/udev.c
@@ -56,7 +56,7 @@ static struct udev_monitor *udev_monitor;
 
 #ifdef CONFIG_UDEV_KMS
 static void
-config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path, const char *syspath,
+config_udev_odev_setup_attribs(const char *path, const char *syspath,
                                int major, int minor,
                                config_odev_probe_proc_ptr probe_callback);
 #endif
@@ -128,7 +128,7 @@ device_added(struct udev_device *udev_device)
 
         LogMessage(X_INFO, "config/udev: Adding drm device (%s)\n", path);
 
-        config_udev_odev_setup_attribs(udev_device, path, syspath, major(devnum),
+        config_udev_odev_setup_attribs(path, syspath, major(devnum),
                                        minor(devnum), NewGPUDeviceRequest);
         return;
     }
@@ -322,7 +322,7 @@ device_removed(struct udev_device *device)
 
         LogMessage(X_INFO, "config/udev: removing GPU device %s %s\n",
                    syspath, path);
-        config_udev_odev_setup_attribs(device, path, syspath, major(devnum),
+        config_udev_odev_setup_attribs(path, syspath, major(devnum),
                                        minor(devnum), DeleteGPUDeviceRequest);
         /* Retry vtenter after a drm node removal */
         systemd_logind_vtenter();
@@ -465,24 +465,17 @@ config_udev_fini(void)
 #ifdef CONFIG_UDEV_KMS
 
 static void
-config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path, const char *syspath,
+config_udev_odev_setup_attribs(const char *path, const char *syspath,
                                int major, int minor,
                                config_odev_probe_proc_ptr probe_callback)
 {
     struct OdevAttributes *attribs = config_odev_allocate_attributes();
-    const char *value;
 
     attribs->path = XNFstrdup(path);
     attribs->syspath = XNFstrdup(syspath);
     attribs->major = major;
     attribs->minor = minor;
 
-    value = udev_device_get_property_value(udev_device, "ID_PATH");
-    if (value && !strncmp(value, "pci-", 4)) {
-        attribs->busid = XNFstrdup(value);
-        attribs->busid[3] = ':';
-    }
-
     /* ownership of attribs is passed to probe layer */
     probe_callback(attribs);
 }
@@ -523,7 +516,7 @@ config_udev_odev_probe(config_odev_probe_proc_ptr probe_callback)
         else if (!check_seat(udev_device))
             goto no_probe;
 
-        config_udev_odev_setup_attribs(udev_device, path, syspath, major(devnum),
+        config_udev_odev_setup_attribs(path, syspath, major(devnum),
                                        minor(devnum), probe_callback);
     no_probe:
         udev_device_unref(udev_device);
diff --git a/hw/xfree86/os-support/linux/lnx_platform.c b/hw/xfree86/os-support/linux/lnx_platform.c
index e62306219..70374ace8 100644
--- a/hw/xfree86/os-support/linux/lnx_platform.c
+++ b/hw/xfree86/os-support/linux/lnx_platform.c
@@ -23,13 +23,13 @@
 static Bool
 get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index)
 {
+    drmSetVersion sv;
     drmVersionPtr v;
+    char *buf;
     int fd;
     int err = 0;
     Bool paused, server_fd = FALSE;
 
-    LogMessage(X_INFO, "Platform probe for %s\n", attribs->syspath);
-
     fd = systemd_logind_take_fd(attribs->major, attribs->minor, path, &paused);
     if (fd != -1) {
         if (paused) {
@@ -48,6 +48,18 @@ get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index)
     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 */
+
+    err = drmSetInterfaceVersion(fd, &sv);
+    if (err) {
+        xf86Msg(X_ERROR, "%s: failed to set DRM interface version 1.4: %s\n",
+                path, strerror(-err));
+        goto out;
+    }
+
     /* for a delayed probe we've already added the device */
     if (delayed_index == -1) {
             xf86_add_platform_device(attribs, FALSE);
@@ -57,6 +69,10 @@ get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index)
     if (server_fd)
         xf86_platform_devices[delayed_index].flags |= XF86_PDEV_SERVER_FD;
 
+    buf = drmGetBusid(fd);
+    xf86_platform_odev_attributes(delayed_index)->busid = XNFstrdup(buf);
+    drmFreeBusid(buf);
+
     v = drmGetVersion(fd);
     if (!v) {
         xf86Msg(X_ERROR, "%s: failed to query DRM version\n", path);
commit 39cb95e959fab97a7e255dda1a1599b096fb0f7e
Author: Olivier Fourdan <ofourdan at redhat.com>
Date:   Tue Sep 8 10:03:11 2020 +0200

    Revert "linux: Fix platform device PCI detection for complex bus topologies"
    
    This reverts commit 5c96eb5f44e62a4cfe835023cde304eb5795b8fd.
    
    https://gitlab.freedesktop.org/xorg/xserver/-/issues/1068

diff --git a/config/udev.c b/config/udev.c
index 14409549b..8c6c4b666 100644
--- a/config/udev.c
+++ b/config/udev.c
@@ -470,7 +470,7 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path
                                config_odev_probe_proc_ptr probe_callback)
 {
     struct OdevAttributes *attribs = config_odev_allocate_attributes();
-    const char *value, *str;
+    const char *value;
 
     attribs->path = XNFstrdup(path);
     attribs->syspath = XNFstrdup(syspath);
@@ -478,8 +478,8 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path
     attribs->minor = minor;
 
     value = udev_device_get_property_value(udev_device, "ID_PATH");
-    if (value && (str = strstr(value, "pci-"))) {
-        attribs->busid = XNFstrdup(str);
+    if (value && !strncmp(value, "pci-", 4)) {
+        attribs->busid = XNFstrdup(value);
         attribs->busid[3] = ':';
     }
 
commit 4b6fce5975c2f931a0478cf4deeec97529b05eb6
Author: Olivier Fourdan <ofourdan at redhat.com>
Date:   Tue Sep 8 10:01:55 2020 +0200

    Revert "linux: Fix platform device probe for DT-based PCI"
    
    This reverts commit 249a12c54a9316b089bd22683c011519348496df.
    
    https://gitlab.freedesktop.org/xorg/xserver/-/issues/1068

diff --git a/config/udev.c b/config/udev.c
index b00d90237..14409549b 100644
--- a/config/udev.c
+++ b/config/udev.c
@@ -464,31 +464,6 @@ config_udev_fini(void)
 
 #ifdef CONFIG_UDEV_KMS
 
-/* Find the last occurrence of the needle in haystack */
-static char *strrstr(const char *haystack, const char *needle)
-{
-    char *prev, *last, *tmp;
-
-    prev = strstr(haystack, needle);
-    if (!prev)
-        return NULL;
-
-    last = prev;
-    tmp = prev + 1;
-
-    while (tmp) {
-        last = strstr(tmp, needle);
-        if (!last)
-            return prev;
-        else {
-            prev = last;
-            tmp = prev + 1;
-        }
-    }
-
-    return last;
-}
-
 static void
 config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path, const char *syspath,
                                int major, int minor,
@@ -503,7 +478,7 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path
     attribs->minor = minor;
 
     value = udev_device_get_property_value(udev_device, "ID_PATH");
-    if (value && (str = strrstr(value, "pci-"))) {
+    if (value && (str = strstr(value, "pci-"))) {
         attribs->busid = XNFstrdup(str);
         attribs->busid[3] = ':';
     }


More information about the xorg-commit mailing list