diff --git a/srcpkgs/xorg-server/patches/mr-508.patch b/srcpkgs/xorg-server/patches/mr-508.patch new file mode 100644 index 00000000000..d3a47c866fa --- /dev/null +++ b/srcpkgs/xorg-server/patches/mr-508.patch @@ -0,0 +1,229 @@ +https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/508/diffs + +From 4b6fce5975c2f931a0478cf4deeec97529b05eb6 Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Tue, 8 Sep 2020 10:01:55 +0200 +Subject: [PATCH 1/3] 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(-) + +--- config/udev.c ++++ 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] = ':'; + } +-- +GitLab + + +From 39cb95e959fab97a7e255dda1a1599b096fb0f7e Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Tue, 8 Sep 2020 10:03:11 +0200 +Subject: [PATCH 2/3] 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(-) + +--- config/udev.c ++++ 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] = ':'; + } + +-- +GitLab + + +From af4c84ce8855e84c0ad89b929bc972e884f0b8e3 Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Tue, 8 Sep 2020 10:03:33 +0200 +Subject: [PATCH 3/3] 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(-) + +--- config/udev.c ++++ 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); +--- hw/xfree86/os-support/linux/lnx_platform.c ++++ 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); +-- +GitLab + diff --git a/srcpkgs/xorg-server/template b/srcpkgs/xorg-server/template index 1d13f877f04..6e589ed7762 100644 --- a/srcpkgs/xorg-server/template +++ b/srcpkgs/xorg-server/template @@ -1,7 +1,7 @@ # Template file for 'xorg-server' pkgname=xorg-server version=1.20.9 -revision=3 +revision=4 build_style=meson configure_args="-Dipv6=true -Dxorg=true -Dxnest=true -Dxephyr=true -Dxvfb=true -Dhal=false -Dudev=true -Dxkb_dir=/usr/share/X11/xkb