summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Bogusz2020-10-11 20:14:55 (GMT)
committerJakub Bogusz2020-10-11 20:14:55 (GMT)
commit4e57b4feb7c5eeb060617912150caa3de4f30e7a (patch)
treed1ab128fb8c5c3c4b63aa485a89f935fe8d8d298
parentbae77c3a2cebaad8ef38bfeeb1ee887a2d9a6ab0 (diff)
downloadxorg-xserver-server-4e57b4feb7c5eeb060617912150caa3de4f30e7a.zip
xorg-xserver-server-4e57b4feb7c5eeb060617912150caa3de4f30e7a.tar.gz
- added crash-revert patch (revert of 3 commits, upstream fix for crash at startup); release 4auto/th/xorg-xserver-server-1.20.9-4
-rw-r--r--xorg-xserver-server-crash-revert.patch232
-rw-r--r--xorg-xserver-server.spec4
2 files changed, 235 insertions, 1 deletions
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@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@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@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
+
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