Accepting request 596204 from home:michalsrb:branches:bnc1068961:X11:XOrg
- U_xfree86-Remove-broken-RANDR-disabling-logic-v4.patch * Fix crash on initialization when fbdev and modesetting are used together. (bnc#1068961) - u_randr-Do-not-crash-if-slave-screen-does-not-have-pro.patch * Fix crash when using randr when fbdev and modesetting are used together. (bnc#1068961) OBS-URL: https://build.opensuse.org/request/show/596204 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=698
This commit is contained in:
parent
1d90db58c1
commit
acfb9a6c3f
215
U_xfree86-Remove-broken-RANDR-disabling-logic-v4.patch
Normal file
215
U_xfree86-Remove-broken-RANDR-disabling-logic-v4.patch
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
Git-commit: dd00e5466a0e4ea313d1860824da4123692827ed
|
||||||
|
Author: Adam Jackson <ajax@redhat.com>
|
||||||
|
Subject: xfree86: Remove broken RANDR disabling logic (v4)
|
||||||
|
Patch-mainline: Upstream
|
||||||
|
References: bnc#1068961
|
||||||
|
Signed-off-by: Michal Srb <msrb@suse.com>
|
||||||
|
|
||||||
|
The only way to get at xf86Info.disableRandR from configuration is
|
||||||
|
Option "RANDR" "foo" in ServerFlags, which probably nobody is using
|
||||||
|
seeing as it's not documented. The other way it could be set is if a
|
||||||
|
screen supports RANDR 1.2, in which case we set it to avoid trying to
|
||||||
|
use the RANDR 1.1 compat code. If the second screen is not 1.2-aware
|
||||||
|
then this would mean we don't do RANDR setup on the second screen at
|
||||||
|
all, which would almost certainly crash the first time you try to do
|
||||||
|
RANDR operations on the second screen.
|
||||||
|
|
||||||
|
Fix that all by deletion, and just check whether the screen already has
|
||||||
|
RANDR initialized before installing the stub support. If you want to
|
||||||
|
disable RANDR, use the Extensions section of xorg.conf instead.
|
||||||
|
|
||||||
|
v2: Also remove a now entirely pointless log message, telling you to
|
||||||
|
ignore a line we will no longer print.
|
||||||
|
|
||||||
|
v3: Explain the fallback path in InitOutput. (Keith Packard)
|
||||||
|
|
||||||
|
v4: Check whether the RANDR private key is initialized before trying to
|
||||||
|
use it to look up the screen private.
|
||||||
|
|
||||||
|
Signed-off-by: Adam Jackson <ajax@redhat.com>
|
||||||
|
Reviewed-by: Keith Packard <keithp@keithp.com>
|
||||||
|
---
|
||||||
|
hw/xfree86/common/xf86.h | 2 --
|
||||||
|
hw/xfree86/common/xf86Config.c | 12 ------------
|
||||||
|
hw/xfree86/common/xf86Globals.c | 2 --
|
||||||
|
hw/xfree86/common/xf86Helper.c | 7 -------
|
||||||
|
hw/xfree86/common/xf86Init.c | 23 +++++++++++++++++------
|
||||||
|
hw/xfree86/common/xf86Mode.c | 6 +-----
|
||||||
|
hw/xfree86/common/xf86Privstr.h | 2 --
|
||||||
|
hw/xfree86/modes/xf86Crtc.c | 3 ---
|
||||||
|
8 files changed, 18 insertions(+), 39 deletions(-)
|
||||||
|
|
||||||
|
Index: xorg-server-1.19.6/hw/xfree86/common/xf86.h
|
||||||
|
===================================================================
|
||||||
|
--- xorg-server-1.19.6.orig/hw/xfree86/common/xf86.h
|
||||||
|
+++ xorg-server-1.19.6/hw/xfree86/common/xf86.h
|
||||||
|
@@ -319,8 +319,6 @@ extern _X_EXPORT Bool
|
||||||
|
xf86GetModInDevEnabled(void);
|
||||||
|
extern _X_EXPORT Bool
|
||||||
|
xf86GetAllowMouseOpenFail(void);
|
||||||
|
-extern _X_EXPORT void
|
||||||
|
-xf86DisableRandR(void);
|
||||||
|
extern _X_EXPORT CARD32
|
||||||
|
xorgGetVersion(void);
|
||||||
|
extern _X_EXPORT CARD32
|
||||||
|
Index: xorg-server-1.19.6/hw/xfree86/common/xf86Config.c
|
||||||
|
===================================================================
|
||||||
|
--- xorg-server-1.19.6.orig/hw/xfree86/common/xf86Config.c
|
||||||
|
+++ xorg-server-1.19.6/hw/xfree86/common/xf86Config.c
|
||||||
|
@@ -710,7 +710,6 @@ typedef enum {
|
||||||
|
FLAG_XINERAMA,
|
||||||
|
FLAG_LOG,
|
||||||
|
FLAG_RENDER_COLORMAP_MODE,
|
||||||
|
- FLAG_RANDR,
|
||||||
|
FLAG_IGNORE_ABI,
|
||||||
|
FLAG_ALLOW_EMPTY_INPUT,
|
||||||
|
FLAG_USE_DEFAULT_FONT_PATH,
|
||||||
|
@@ -763,8 +762,6 @@ static OptionInfoRec FlagOptions[] = {
|
||||||
|
{0}, FALSE},
|
||||||
|
{FLAG_RENDER_COLORMAP_MODE, "RenderColormapMode", OPTV_STRING,
|
||||||
|
{0}, FALSE},
|
||||||
|
- {FLAG_RANDR, "RandR", OPTV_BOOLEAN,
|
||||||
|
- {0}, FALSE},
|
||||||
|
{FLAG_IGNORE_ABI, "IgnoreABI", OPTV_BOOLEAN,
|
||||||
|
{0}, FALSE},
|
||||||
|
{FLAG_USE_DEFAULT_FONT_PATH, "UseDefaultFontPath", OPTV_BOOLEAN,
|
||||||
|
@@ -909,15 +906,6 @@ configServerFlags(XF86ConfFlagsPtr flags
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-#ifdef RANDR
|
||||||
|
- xf86Info.disableRandR = FALSE;
|
||||||
|
- xf86Info.randRFrom = X_DEFAULT;
|
||||||
|
- if (xf86GetOptValBool(FlagOptions, FLAG_RANDR, &value)) {
|
||||||
|
- xf86Info.disableRandR = !value;
|
||||||
|
- xf86Info.randRFrom = X_CONFIG;
|
||||||
|
- }
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
#ifdef GLXEXT
|
||||||
|
xf86Info.glxVisuals = XF86_GlxVisualsTypical;
|
||||||
|
xf86Info.glxVisualsFrom = X_DEFAULT;
|
||||||
|
Index: xorg-server-1.19.6/hw/xfree86/common/xf86Globals.c
|
||||||
|
===================================================================
|
||||||
|
--- xorg-server-1.19.6.orig/hw/xfree86/common/xf86Globals.c
|
||||||
|
+++ xorg-server-1.19.6/hw/xfree86/common/xf86Globals.c
|
||||||
|
@@ -121,8 +121,6 @@ xf86InfoRec xf86Info = {
|
||||||
|
.pixmap24 = Pix24DontCare,
|
||||||
|
.pix24From = X_DEFAULT,
|
||||||
|
.pmFlag = TRUE,
|
||||||
|
- .disableRandR = FALSE,
|
||||||
|
- .randRFrom = X_DEFAULT,
|
||||||
|
#if defined(CONFIG_HAL) || defined(CONFIG_UDEV) || defined(CONFIG_WSCONS)
|
||||||
|
.forceInputDevices = FALSE,
|
||||||
|
.autoAddDevices = TRUE,
|
||||||
|
Index: xorg-server-1.19.6/hw/xfree86/common/xf86Helper.c
|
||||||
|
===================================================================
|
||||||
|
--- xorg-server-1.19.6.orig/hw/xfree86/common/xf86Helper.c
|
||||||
|
+++ xorg-server-1.19.6/hw/xfree86/common/xf86Helper.c
|
||||||
|
@@ -1572,13 +1572,6 @@ xf86GetAllowMouseOpenFail(void)
|
||||||
|
return xf86Info.allowMouseOpenFail;
|
||||||
|
}
|
||||||
|
|
||||||
|
-void
|
||||||
|
-xf86DisableRandR(void)
|
||||||
|
-{
|
||||||
|
- xf86Info.disableRandR = TRUE;
|
||||||
|
- xf86Info.randRFrom = X_PROBED;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
CARD32
|
||||||
|
xf86GetModuleVersion(void *module)
|
||||||
|
{
|
||||||
|
Index: xorg-server-1.19.6/hw/xfree86/common/xf86Init.c
|
||||||
|
===================================================================
|
||||||
|
--- xorg-server-1.19.6.orig/hw/xfree86/common/xf86Init.c
|
||||||
|
+++ xorg-server-1.19.6/hw/xfree86/common/xf86Init.c
|
||||||
|
@@ -77,6 +77,7 @@
|
||||||
|
#include "xf86Xinput.h"
|
||||||
|
#include "xf86InPriv.h"
|
||||||
|
#include "picturestr.h"
|
||||||
|
+#include "randrstr.h"
|
||||||
|
|
||||||
|
#include "xf86Bus.h"
|
||||||
|
#ifdef XSERVER_LIBPCIACCESS
|
||||||
|
@@ -380,6 +381,16 @@ xf86ScreenInit(ScreenPtr pScreen, int ar
|
||||||
|
return pScrn->ScreenInit (pScreen, argc, argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+xf86EnsureRANDR(ScreenPtr pScreen)
|
||||||
|
+{
|
||||||
|
+#ifdef RANDR
|
||||||
|
+ if (!dixPrivateKeyRegistered(rrPrivKey) ||
|
||||||
|
+ !rrGetScrPriv(pScreen))
|
||||||
|
+ xf86RandRInit(pScreen);
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* InitOutput --
|
||||||
|
* Initialize screenInfo for all actually accessible framebuffers.
|
||||||
|
@@ -871,12 +882,12 @@ InitOutput(ScreenInfo * pScreenInfo, int
|
||||||
|
SubPixelHorizontalRGB : SubPixelNone) :
|
||||||
|
SubPixelUnknown);
|
||||||
|
}
|
||||||
|
-#ifdef RANDR
|
||||||
|
- if (!xf86Info.disableRandR)
|
||||||
|
- xf86RandRInit(screenInfo.screens[scr_index]);
|
||||||
|
- xf86Msg(xf86Info.randRFrom, "RandR %s\n",
|
||||||
|
- xf86Info.disableRandR ? "disabled" : "enabled");
|
||||||
|
-#endif
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * If the driver hasn't set up its own RANDR support, install the
|
||||||
|
+ * fallback support.
|
||||||
|
+ */
|
||||||
|
+ xf86EnsureRANDR(xf86Screens[i]->pScreen);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < xf86NumGPUScreens; i++)
|
||||||
|
Index: xorg-server-1.19.6/hw/xfree86/common/xf86Mode.c
|
||||||
|
===================================================================
|
||||||
|
--- xorg-server-1.19.6.orig/hw/xfree86/common/xf86Mode.c
|
||||||
|
+++ xorg-server-1.19.6/hw/xfree86/common/xf86Mode.c
|
||||||
|
@@ -1664,12 +1664,8 @@ xf86ValidateModes(ScrnInfoPtr scrp, Disp
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Lookup each mode */
|
||||||
|
-#ifdef RANDR
|
||||||
|
- if (!xf86Info.disableRandR
|
||||||
|
#ifdef PANORAMIX
|
||||||
|
- && noPanoramiXExtension
|
||||||
|
-#endif
|
||||||
|
- )
|
||||||
|
+ if (noPanoramiXExtension)
|
||||||
|
validateAllDefaultModes = TRUE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Index: xorg-server-1.19.6/hw/xfree86/common/xf86Privstr.h
|
||||||
|
===================================================================
|
||||||
|
--- xorg-server-1.19.6.orig/hw/xfree86/common/xf86Privstr.h
|
||||||
|
+++ xorg-server-1.19.6/hw/xfree86/common/xf86Privstr.h
|
||||||
|
@@ -85,8 +85,6 @@ typedef struct {
|
||||||
|
Pix24Flags pixmap24;
|
||||||
|
MessageType pix24From;
|
||||||
|
Bool pmFlag;
|
||||||
|
- Bool disableRandR;
|
||||||
|
- MessageType randRFrom;
|
||||||
|
MessageType iglxFrom;
|
||||||
|
XF86_GlxVisuals glxVisuals;
|
||||||
|
MessageType glxVisualsFrom;
|
||||||
|
Index: xorg-server-1.19.6/hw/xfree86/modes/xf86Crtc.c
|
||||||
|
===================================================================
|
||||||
|
--- xorg-server-1.19.6.orig/hw/xfree86/modes/xf86Crtc.c
|
||||||
|
+++ xorg-server-1.19.6/hw/xfree86/modes/xf86Crtc.c
|
||||||
|
@@ -773,9 +773,6 @@ xf86CrtcScreenInit(ScreenPtr screen)
|
||||||
|
int c;
|
||||||
|
|
||||||
|
/* Rotation */
|
||||||
|
- xf86DrvMsg(scrn->scrnIndex, X_INFO,
|
||||||
|
- "RandR 1.2 enabled, ignore the following RandR disabled message.\n");
|
||||||
|
- xf86DisableRandR(); /* Disable old RandR extension support */
|
||||||
|
xf86RandR12Init(screen);
|
||||||
|
|
||||||
|
/* support all rotations if every crtc has the shadow alloc funcs */
|
41
u_randr-Do-not-crash-if-slave-screen-does-not-have-pro.patch
Normal file
41
u_randr-Do-not-crash-if-slave-screen-does-not-have-pro.patch
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
Patch-mainline: To be upstreamed
|
||||||
|
Author: Michal Srb <msrb@suse.com>
|
||||||
|
Subject: randr: Do not crash if slave screen does not have provider.
|
||||||
|
References: bnc#1068961
|
||||||
|
|
||||||
|
All GPU screens are attached as unbound GPUs to master, even if they have no
|
||||||
|
capabilities or the provider field is null. Handle that case in RRTellChanged.
|
||||||
|
---
|
||||||
|
This prevents crash in setups with for example two qxl devices, or fbdev and
|
||||||
|
qxl device. I am not sure if it is a proper fix and not just papering over a
|
||||||
|
bug somewhere else, but there are more places that test whether the provider
|
||||||
|
is set, so maybe it is correct way.
|
||||||
|
|
||||||
|
I would think that if a slave screen does not have provider, there is no reason
|
||||||
|
for it to become an unbound GPU in master's slave_list. Similarly if master has
|
||||||
|
no provider, then having anything in slave_list is useless. But it seems the
|
||||||
|
AttachUnboundGPU and the rest of the code handling screen to GPU screen
|
||||||
|
attachments does not know about randr's privates, so it can not check whether
|
||||||
|
provider is there.
|
||||||
|
|
||||||
|
randr/randr.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/randr/randr.c b/randr/randr.c
|
||||||
|
index feb54bcc8..661f66da2 100644
|
||||||
|
--- a/randr/randr.c
|
||||||
|
+++ b/randr/randr.c
|
||||||
|
@@ -643,7 +643,9 @@ RRTellChanged(ScreenPtr pScreen)
|
||||||
|
|
||||||
|
xorg_list_for_each_entry(iter, &master->slave_list, slave_head) {
|
||||||
|
pSlaveScrPriv = rrGetScrPriv(iter);
|
||||||
|
- pSlaveScrPriv->provider->changed = FALSE;
|
||||||
|
+ if (pSlaveScrPriv->provider) {
|
||||||
|
+ pSlaveScrPriv->provider->changed = FALSE;
|
||||||
|
+ }
|
||||||
|
if (iter->is_output_slave) {
|
||||||
|
for (i = 0; i < pSlaveScrPriv->numOutputs; i++)
|
||||||
|
pSlaveScrPriv->outputs[i]->changed = FALSE;
|
||||||
|
--
|
||||||
|
2.13.6
|
||||||
|
|
@ -1,3 +1,13 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Apr 12 07:34:06 UTC 2018 - msrb@suse.com
|
||||||
|
|
||||||
|
- U_xfree86-Remove-broken-RANDR-disabling-logic-v4.patch
|
||||||
|
* Fix crash on initialization when fbdev and modesetting are used
|
||||||
|
together. (bnc#1068961)
|
||||||
|
- u_randr-Do-not-crash-if-slave-screen-does-not-have-pro.patch
|
||||||
|
* Fix crash when using randr when fbdev and modesetting are used
|
||||||
|
together. (bnc#1068961)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Mar 27 14:42:18 UTC 2018 - msrb@suse.com
|
Tue Mar 27 14:42:18 UTC 2018 - msrb@suse.com
|
||||||
|
|
||||||
|
@ -232,6 +232,9 @@ Patch1303: U_0003-animcur-Run-the-timer-from-the-device-not-the-screen.patc
|
|||||||
Patch1304: U_0004-animcur-Fix-transitions-between-animated-cursors.patch
|
Patch1304: U_0004-animcur-Fix-transitions-between-animated-cursors.patch
|
||||||
Patch1305: u_xorg-x11-server-reproducible.patch
|
Patch1305: u_xorg-x11-server-reproducible.patch
|
||||||
|
|
||||||
|
Patch1400: U_xfree86-Remove-broken-RANDR-disabling-logic-v4.patch
|
||||||
|
Patch1401: u_randr-Do-not-crash-if-slave-screen-does-not-have-pro.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
This package contains the X.Org Server.
|
This package contains the X.Org Server.
|
||||||
|
|
||||||
@ -381,6 +384,9 @@ sh %{SOURCE92} --verify . %{SOURCE91}
|
|||||||
%patch1304 -p1
|
%patch1304 -p1
|
||||||
%patch1305 -p1
|
%patch1305 -p1
|
||||||
|
|
||||||
|
%patch1400 -p1
|
||||||
|
%patch1401 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
test -e source-file-list || \
|
test -e source-file-list || \
|
||||||
find -L . -type f \! -name '*.orig' \! -path ./source-file-list > \
|
find -L . -type f \! -name '*.orig' \! -path ./source-file-list > \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user