Fix a few input thread lock issues causing intel crashes (#1384486)
This commit is contained in:
parent
4ef2a804fc
commit
75479d7765
34
0001-xfree86-Take-input-lock-for-xf86TransparentCursor.patch
Normal file
34
0001-xfree86-Take-input-lock-for-xf86TransparentCursor.patch
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
From adccf461f12bc9f7df990e792659489d285890d4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chris Wilson <chris@chris-wilson.co.uk>
|
||||||
|
Date: Mon, 16 Jan 2017 22:36:34 +0000
|
||||||
|
Subject: [PATCH xserver] xfree86: Take input lock for xf86TransparentCursor
|
||||||
|
|
||||||
|
---
|
||||||
|
hw/xfree86/ramdac/xf86HWCurs.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/hw/xfree86/ramdac/xf86HWCurs.c b/hw/xfree86/ramdac/xf86HWCurs.c
|
||||||
|
index 55d5861..26dc7e5 100644
|
||||||
|
--- a/hw/xfree86/ramdac/xf86HWCurs.c
|
||||||
|
+++ b/hw/xfree86/ramdac/xf86HWCurs.c
|
||||||
|
@@ -261,6 +261,8 @@ xf86SetTransparentCursor(ScreenPtr pScreen)
|
||||||
|
xf86CursorScreenKey);
|
||||||
|
xf86CursorInfoPtr infoPtr = ScreenPriv->CursorInfoPtr;
|
||||||
|
|
||||||
|
+ input_lock();
|
||||||
|
+
|
||||||
|
if (!ScreenPriv->transparentData)
|
||||||
|
ScreenPriv->transparentData =
|
||||||
|
(*infoPtr->RealizeCursor) (infoPtr, NullCursor);
|
||||||
|
@@ -273,6 +275,8 @@ xf86SetTransparentCursor(ScreenPtr pScreen)
|
||||||
|
ScreenPriv->transparentData);
|
||||||
|
|
||||||
|
(*infoPtr->ShowCursor) (infoPtr->pScrn);
|
||||||
|
+
|
||||||
|
+ input_unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
@ -0,0 +1,62 @@
|
|||||||
|
From ecec69ff9a5b1bbdd4f8eae27ffce99bcf34fb65 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chris Wilson <chris@chris-wilson.co.uk>
|
||||||
|
Date: Fri, 20 Jan 2017 09:49:19 +0000
|
||||||
|
Subject: [PATCH xserver] xfree86: Take input_lock() for
|
||||||
|
xf86ScreenCheckHWCursor
|
||||||
|
|
||||||
|
---
|
||||||
|
hw/xfree86/ramdac/xf86HWCurs.c | 27 ++++++++++++++++++++-------
|
||||||
|
1 file changed, 20 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/hw/xfree86/ramdac/xf86HWCurs.c b/hw/xfree86/ramdac/xf86HWCurs.c
|
||||||
|
index 26dc7e5..7043a9c 100644
|
||||||
|
--- a/hw/xfree86/ramdac/xf86HWCurs.c
|
||||||
|
+++ b/hw/xfree86/ramdac/xf86HWCurs.c
|
||||||
|
@@ -139,9 +139,14 @@ Bool
|
||||||
|
xf86CheckHWCursor(ScreenPtr pScreen, CursorPtr cursor, xf86CursorInfoPtr infoPtr)
|
||||||
|
{
|
||||||
|
ScreenPtr pSlave;
|
||||||
|
+ Bool use_hw_cursor = TRUE;
|
||||||
|
|
||||||
|
- if (!xf86ScreenCheckHWCursor(pScreen, cursor, infoPtr))
|
||||||
|
- return FALSE;
|
||||||
|
+ input_lock();
|
||||||
|
+
|
||||||
|
+ if (!xf86ScreenCheckHWCursor(pScreen, cursor, infoPtr)) {
|
||||||
|
+ use_hw_cursor = FALSE;
|
||||||
|
+ goto unlock;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* ask each driver consuming a pixmap if it can support HW cursor */
|
||||||
|
xorg_list_for_each_entry(pSlave, &pScreen->slave_list, slave_head) {
|
||||||
|
@@ -151,14 +156,22 @@ xf86CheckHWCursor(ScreenPtr pScreen, CursorPtr cursor, xf86CursorInfoPtr infoPtr
|
||||||
|
continue;
|
||||||
|
|
||||||
|
sPriv = dixLookupPrivate(&pSlave->devPrivates, xf86CursorScreenKey);
|
||||||
|
- if (!sPriv) /* NULL if Option "SWCursor", possibly other conditions */
|
||||||
|
- return FALSE;
|
||||||
|
+ if (!sPriv) { /* NULL if Option "SWCursor", possibly other conditions */
|
||||||
|
+ use_hw_cursor = FALSE;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/* FALSE if HWCursor not supported by slave */
|
||||||
|
- if (!xf86ScreenCheckHWCursor(pSlave, cursor, sPriv->CursorInfoPtr))
|
||||||
|
- return FALSE;
|
||||||
|
+ if (!xf86ScreenCheckHWCursor(pSlave, cursor, sPriv->CursorInfoPtr)) {
|
||||||
|
+ use_hw_cursor = FALSE;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
- return TRUE;
|
||||||
|
+
|
||||||
|
+unlock:
|
||||||
|
+ input_unlock();
|
||||||
|
+
|
||||||
|
+ return use_hw_cursor;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
76
0001-xfree86-Take-the-input-lock-for-xf86RecolorCursor.patch
Normal file
76
0001-xfree86-Take-the-input-lock-for-xf86RecolorCursor.patch
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
From 9ac63cdf132f430bf4bf33561b15298538db6070 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chris Wilson <chris@chris-wilson.co.uk>
|
||||||
|
Date: Mon, 16 Jan 2017 22:17:36 +0000
|
||||||
|
Subject: [PATCH xserver] xfree86: Take the input lock for xf86RecolorCursor
|
||||||
|
|
||||||
|
xf86RecolorCursor() may be called directly from XRecolorCursor as well
|
||||||
|
as from xf86ScreenSetCursor(). In the latter case, the input lock is
|
||||||
|
already held, but not for the former and so we need to add a wrapper
|
||||||
|
function that acquires the input lock before performing
|
||||||
|
xf86RecolorCursor()
|
||||||
|
|
||||||
|
References: https://bugs.freedesktop.org/show_bug.cgi?id=99358
|
||||||
|
---
|
||||||
|
hw/xfree86/ramdac/xf86HWCurs.c | 24 ++++++++++++++++++------
|
||||||
|
1 file changed, 18 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/hw/xfree86/ramdac/xf86HWCurs.c b/hw/xfree86/ramdac/xf86HWCurs.c
|
||||||
|
index 4481320..55d5861 100644
|
||||||
|
--- a/hw/xfree86/ramdac/xf86HWCurs.c
|
||||||
|
+++ b/hw/xfree86/ramdac/xf86HWCurs.c
|
||||||
|
@@ -22,6 +22,9 @@
|
||||||
|
|
||||||
|
#include "servermd.h"
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+xf86RecolorCursor_locked(xf86CursorScreenPtr ScreenPriv, CursorPtr pCurs);
|
||||||
|
+
|
||||||
|
static CARD32
|
||||||
|
xf86ReverseBitOrder(CARD32 v)
|
||||||
|
{
|
||||||
|
@@ -204,7 +207,7 @@ xf86ScreenSetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y)
|
||||||
|
if (!xf86DriverLoadCursorImage (infoPtr, bits))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
- xf86RecolorCursor(pScreen, pCurs, 1);
|
||||||
|
+ xf86RecolorCursor_locked (ScreenPriv, pCurs);
|
||||||
|
|
||||||
|
(*infoPtr->SetCursorPosition) (infoPtr->pScrn, x, y);
|
||||||
|
|
||||||
|
@@ -312,12 +315,9 @@ xf86MoveCursor(ScreenPtr pScreen, int x, int y)
|
||||||
|
input_unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
-void
|
||||||
|
-xf86RecolorCursor(ScreenPtr pScreen, CursorPtr pCurs, Bool displayed)
|
||||||
|
+static void
|
||||||
|
+xf86RecolorCursor_locked(xf86CursorScreenPtr ScreenPriv, CursorPtr pCurs)
|
||||||
|
{
|
||||||
|
- xf86CursorScreenPtr ScreenPriv =
|
||||||
|
- (xf86CursorScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
|
||||||
|
- xf86CursorScreenKey);
|
||||||
|
xf86CursorInfoPtr infoPtr = ScreenPriv->CursorInfoPtr;
|
||||||
|
|
||||||
|
/* recoloring isn't applicable to ARGB cursors and drivers
|
||||||
|
@@ -357,6 +357,18 @@ xf86RecolorCursor(ScreenPtr pScreen, CursorPtr pCurs, Bool displayed)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+void
|
||||||
|
+xf86RecolorCursor(ScreenPtr pScreen, CursorPtr pCurs, Bool displayed)
|
||||||
|
+{
|
||||||
|
+ xf86CursorScreenPtr ScreenPriv =
|
||||||
|
+ (xf86CursorScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
|
||||||
|
+ xf86CursorScreenKey);
|
||||||
|
+
|
||||||
|
+ input_lock();
|
||||||
|
+ xf86RecolorCursor_locked (ScreenPriv, pCurs);
|
||||||
|
+ input_unlock();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* These functions assume that MaxWidth is a multiple of 32 */
|
||||||
|
static unsigned char *
|
||||||
|
RealizeCursorInterleave0(xf86CursorInfoPtr infoPtr, CursorPtr pCurs)
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
@ -45,7 +45,7 @@
|
|||||||
Summary: X.Org X11 X server
|
Summary: X.Org X11 X server
|
||||||
Name: xorg-x11-server
|
Name: xorg-x11-server
|
||||||
Version: 1.19.1
|
Version: 1.19.1
|
||||||
Release: 2%{?gitdate:.%{gitdate}}%{dist}
|
Release: 3%{?gitdate:.%{gitdate}}%{dist}
|
||||||
URL: http://www.x.org
|
URL: http://www.x.org
|
||||||
License: MIT
|
License: MIT
|
||||||
Group: User Interface/X
|
Group: User Interface/X
|
||||||
@ -102,10 +102,14 @@ Patch7025: 0001-Always-install-vbe-and-int10-sdk-headers.patch
|
|||||||
# Submitted upstream, but not going anywhere
|
# Submitted upstream, but not going anywhere
|
||||||
Patch7027: xserver-autobind-hotplug.patch
|
Patch7027: xserver-autobind-hotplug.patch
|
||||||
|
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1384486
|
||||||
|
Patch8000: 0001-xfree86-Take-input-lock-for-xf86TransparentCursor.patch
|
||||||
|
Patch8001: 0001-xfree86-Take-the-input-lock-for-xf86RecolorCursor.patch
|
||||||
|
Patch8002: 0001-xfree86-Take-input_lock-for-xf86ScreenCheckHWCursor.patch
|
||||||
|
|
||||||
# because the display-managers are not ready yet, do not upstream
|
# because the display-managers are not ready yet, do not upstream
|
||||||
Patch10000: 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch
|
Patch10000: 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch
|
||||||
|
|
||||||
|
|
||||||
%global moduledir %{_libdir}/xorg/modules
|
%global moduledir %{_libdir}/xorg/modules
|
||||||
%global drimoduledir %{_libdir}/dri
|
%global drimoduledir %{_libdir}/dri
|
||||||
%global sdkdir %{_includedir}/xorg
|
%global sdkdir %{_includedir}/xorg
|
||||||
@ -598,6 +602,9 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Feb 01 2017 Peter Hutterer <peter.hutterer@redhat.com> 1.19.1-3
|
||||||
|
- Fix a few input thread lock issues causing intel crashes (#1384486)
|
||||||
|
|
||||||
* Mon Jan 16 2017 Adam Jackson <ajax@redhat.com> - 1.19.1-2
|
* Mon Jan 16 2017 Adam Jackson <ajax@redhat.com> - 1.19.1-2
|
||||||
- Limit the intel driver only on F26 and up
|
- Limit the intel driver only on F26 and up
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user