- U_Fix-segfault-on-probing-a-non-PCI-platform-device-on.patch,
U_Revert-linux-Fix-platform-device-PCI-detection-for-c.patch, U_Revert-linux-Fix-platform-device-probe-for-DT-based-.patch, U_Revert-linux-Make-platform-device-probe-less-fragile.patch * fix Xserver startup on Raspberry Pi 3 (boo#1176203) OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=778
This commit is contained in:
parent
ff8f302031
commit
69975cf67c
31
U_Fix-segfault-on-probing-a-non-PCI-platform-device-on.patch
Normal file
31
U_Fix-segfault-on-probing-a-non-PCI-platform-device-on.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
From e50c85f4ebf559a3bac4817b41074c43d4691779 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eric Anholt <eric@anholt.net>
|
||||||
|
Date: Fri, 26 Oct 2018 17:47:30 -0700
|
||||||
|
Subject: [PATCH] Fix segfault on probing a non-PCI platform device on a system
|
||||||
|
with PCI.
|
||||||
|
|
||||||
|
Some Broadcom set-top-box boards have PCI busses, but the GPU is still
|
||||||
|
probed through DT. We would dereference a null busid here in that
|
||||||
|
case.
|
||||||
|
|
||||||
|
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||||
|
---
|
||||||
|
hw/xfree86/common/xf86platformBus.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
|
||||||
|
index cef47da03..dadbac6c8 100644
|
||||||
|
--- a/hw/xfree86/common/xf86platformBus.c
|
||||||
|
+++ b/hw/xfree86/common/xf86platformBus.c
|
||||||
|
@@ -289,7 +289,7 @@ xf86platformProbe(void)
|
||||||
|
for (i = 0; i < xf86_num_platform_devices; i++) {
|
||||||
|
char *busid = xf86_platform_odev_attributes(i)->busid;
|
||||||
|
|
||||||
|
- if (pci && (strncmp(busid, "pci:", 4) == 0)) {
|
||||||
|
+ if (pci && busid && (strncmp(busid, "pci:", 4) == 0)) {
|
||||||
|
platform_find_pci_info(&xf86_platform_devices[i], busid);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
40
U_Revert-linux-Fix-platform-device-PCI-detection-for-c.patch
Normal file
40
U_Revert-linux-Fix-platform-device-PCI-detection-for-c.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
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: [PATCH] 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] = ':';
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
60
U_Revert-linux-Fix-platform-device-probe-for-DT-based-.patch
Normal file
60
U_Revert-linux-Fix-platform-device-probe-for-DT-based-.patch
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
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: [PATCH] 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] = ':';
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
132
U_Revert-linux-Make-platform-device-probe-less-fragile.patch
Normal file
132
U_Revert-linux-Make-platform-device-probe-less-fragile.patch
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
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: [PATCH] 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);
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@ -1,3 +1,12 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Sep 28 10:29:23 UTC 2020 - Stefan Dirsch <sndirsch@suse.com>
|
||||||
|
|
||||||
|
- U_Fix-segfault-on-probing-a-non-PCI-platform-device-on.patch,
|
||||||
|
U_Revert-linux-Fix-platform-device-PCI-detection-for-c.patch,
|
||||||
|
U_Revert-linux-Fix-platform-device-probe-for-DT-based-.patch,
|
||||||
|
U_Revert-linux-Make-platform-device-probe-less-fragile.patch
|
||||||
|
* fix Xserver startup on Raspberry Pi 3 (boo#1176203)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Sep 9 18:50:37 UTC 2020 - Michael Gorse <mgorse@suse.com>
|
Wed Sep 9 18:50:37 UTC 2020 - Michael Gorse <mgorse@suse.com>
|
||||||
|
|
||||||
|
@ -251,6 +251,11 @@ Patch1505: U_xwayland-Allow-passing-a-fd.patch
|
|||||||
Patch1600: U_glamor_egl-Reject-OpenGL-2.1-early-on.patch
|
Patch1600: U_glamor_egl-Reject-OpenGL-2.1-early-on.patch
|
||||||
Patch1700: U_xfree86_take_second_ref_for_xcursor.patch
|
Patch1700: U_xfree86_take_second_ref_for_xcursor.patch
|
||||||
|
|
||||||
|
Patch1801: U_Fix-segfault-on-probing-a-non-PCI-platform-device-on.patch
|
||||||
|
Patch1802: U_Revert-linux-Fix-platform-device-probe-for-DT-based-.patch
|
||||||
|
Patch1803: U_Revert-linux-Fix-platform-device-PCI-detection-for-c.patch
|
||||||
|
Patch1804: U_Revert-linux-Make-platform-device-probe-less-fragile.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
This package contains the X.Org Server.
|
This package contains the X.Org Server.
|
||||||
|
|
||||||
@ -400,6 +405,10 @@ sh %{SOURCE92} --verify . %{SOURCE91}
|
|||||||
%patch1505 -p1
|
%patch1505 -p1
|
||||||
%patch1600 -p1
|
%patch1600 -p1
|
||||||
%patch1700 -p1
|
%patch1700 -p1
|
||||||
|
%patch1801 -p1
|
||||||
|
%patch1802 -p1
|
||||||
|
%patch1803 -p1
|
||||||
|
%patch1804 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%define _lto_cflags %{nil}
|
%define _lto_cflags %{nil}
|
||||||
|
Loading…
Reference in New Issue
Block a user