forked from pool/xorg-x11-server
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
|
||||
|
||||
|
@ -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
|
||||
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
|
||||
This package contains the X.Org Server.
|
||||
|
||||
@ -381,6 +384,9 @@ sh %{SOURCE92} --verify . %{SOURCE91}
|
||||
%patch1304 -p1
|
||||
%patch1305 -p1
|
||||
|
||||
%patch1400 -p1
|
||||
%patch1401 -p1
|
||||
|
||||
%build
|
||||
test -e source-file-list || \
|
||||
find -L . -type f \! -name '*.orig' \! -path ./source-file-list > \
|
||||
|
Loading…
Reference in New Issue
Block a user