[packages/xorg-xserver-server] - added crash-revert patch (revert of 3 commits, upstream fix for crash at startup); release 4

qboosh qboosh at pld-linux.org
Sun Oct 11 22:14:58 CEST 2020


commit 4e57b4feb7c5eeb060617912150caa3de4f30e7a
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date:   Sun Oct 11 22:14:55 2020 +0200

    - added crash-revert patch (revert of 3 commits, upstream fix for crash at startup); release 4

 xorg-xserver-server-crash-revert.patch | 232 +++++++++++++++++++++++++++++++++
 xorg-xserver-server.spec               |   4 +-
 2 files changed, 235 insertions(+), 1 deletion(-)
---
diff --git a/xorg-xserver-server.spec b/xorg-xserver-server.spec
index 453dd9c..95af5ef 100644
--- a/xorg-xserver-server.spec
+++ b/xorg-xserver-server.spec
@@ -35,7 +35,7 @@ Summary:	X.org server
 Summary(pl.UTF-8):	Serwer X.org
 Name:		xorg-xserver-server
 Version:	1.20.9
-Release:	3
+Release:	4
 License:	MIT
 Group:		X11/Servers
 Source0:	https://xorg.freedesktop.org/releases/individual/xserver/xorg-server-%{version}.tar.bz2
@@ -46,6 +46,7 @@ Source10:	%{name}-Xvfb.init
 Source11:	%{name}-Xvfb.sysconfig
 Source12:	xvfb-run.sh
 Patch1:		%{name}-xwrapper-pam.patch
+Patch2:		%{name}-crash-revert.patch
 
 Patch4:		%{name}-builtin-SHA1.patch
 
@@ -424,6 +425,7 @@ Biblioteka rozszerzenia GLX dla serwera X.org.
 %prep
 %setup -q -n xorg-server-%{version}
 %patch1 -p1
+%patch2 -p1
 
 %patch4 -p1
 
diff --git a/xorg-xserver-server-crash-revert.patch b/xorg-xserver-server-crash-revert.patch
new file mode 100644
index 0000000..4cb6dc5
--- /dev/null
+++ b/xorg-xserver-server-crash-revert.patch
@@ -0,0 +1,232 @@
+From 4b6fce5975c2f931a0478cf4deeec97529b05eb6 Mon Sep 17 00:00:00 2001
+From: Olivier Fourdan <ofourdan at redhat.com>
+Date: Tue, 8 Sep 2020 10:01:55 +0200
+Subject: Revert "linux: Fix platform device probe for DT-based PCI"
+
+This reverts commit 249a12c54a9316b089bd22683c011519348496df.
+
+https://gitlab.freedesktop.org/xorg/xserver/-/issues/1068
+---
+ config/udev.c | 27 +--------------------------
+ 1 file changed, 1 insertion(+), 26 deletions(-)
+
+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] = ':';
+     }
+-- 
+cgit v1.2.1
+
+From 39cb95e959fab97a7e255dda1a1599b096fb0f7e Mon Sep 17 00:00:00 2001
+From: Olivier Fourdan <ofourdan at redhat.com>
+Date: Tue, 8 Sep 2020 10:03:11 +0200
+Subject: Revert "linux: Fix platform device PCI detection for complex bus
+ topologies"
+
+This reverts commit 5c96eb5f44e62a4cfe835023cde304eb5795b8fd.
+
+https://gitlab.freedesktop.org/xorg/xserver/-/issues/1068
+---
+ config/udev.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+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] = ':';
+     }
+ 
+-- 
+cgit v1.2.1
+
+From af4c84ce8855e84c0ad89b929bc972e884f0b8e3 Mon Sep 17 00:00:00 2001
+From: Olivier Fourdan <ofourdan at redhat.com>
+Date: Tue, 8 Sep 2020 10:03:33 +0200
+Subject: Revert "linux: Make platform device probe less fragile"
+
+This reverts commit 74b7427c41b4e4104af7abf70a996c086d3d7628.
+
+https://gitlab.freedesktop.org/xorg/xserver/-/issues/1068
+---
+ config/udev.c                              | 17 +++++------------
+ hw/xfree86/os-support/linux/lnx_platform.c | 20 ++++++++++++++++++--
+ 2 files changed, 23 insertions(+), 14 deletions(-)
+
+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);
+-- 
+cgit v1.2.1
+
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/xorg-xserver-server.git/commitdiff/4e57b4feb7c5eeb060617912150caa3de4f30e7a



More information about the pld-cvs-commit mailing list