diff options
-rw-r--r-- | .SRCINFO | 2 | ||||
-rw-r--r-- | PKGBUILD | 13 | ||||
-rw-r--r-- | git-fixes.diff (renamed from damageRegionProcessPending.diff) | 98 |
3 files changed, 107 insertions, 6 deletions
@@ -1,6 +1,6 @@ pkgbase = xorg-server-dev pkgver = 1.19.0 - pkgrel = 3 + pkgrel = 4 url = http://xorg.freedesktop.org arch = i686 arch = x86_64 @@ -4,7 +4,7 @@ _pkgbase=xorg-server pkgname=('xorg-server-dev' 'xorg-server-xephyr-dev' 'xorg-server-xdmx-dev' 'xorg-server-xvfb-dev' 'xorg-server-xnest-dev' 'xorg-server-xwayland-dev' 'xorg-server-common-dev' 'xorg-server-devel-dev') pkgver=1.19.0 # http://lists.x.org/archives/xorg/2016-November/058437.html -pkgrel=3 # https://git.archlinux.org/svntogit/packages.git/commit/trunk?h=packages/xorg-server&id=0be9f6c67493ff0f5388262ac675f6db7a2b23a7 +pkgrel=4 # https://git.archlinux.org/svntogit/packages.git/commit/trunk?h=packages/xorg-server&id=9364081f4a0d663bc9461d76cc15aedd135ca9e7 arch=('i686' 'x86_64') license=('custom') groups=('xorg') @@ -19,7 +19,7 @@ makedepends=('pixman' 'libx11' 'mesa' 'libgl' 'xf86driproto' 'xcmiscproto' 'xtra source=(${url}/releases/individual/xserver/${_pkgbase}-${pkgver}.tar.bz2{,.sig} xvfb-run xvfb-run.1* - damageRegionProcessPending.diff) + git-fixes.diff) validpgpkeys=('7B27A3F1A6E18CD9588B4AE8310180050905E40C' 'C383B778255613DFDB409D91DB221A6900000011' 'DD38563A8A8224537D1F90E45B8A2D50A0ECD0D3') @@ -27,13 +27,16 @@ sha256sums=('149a708b50befc2d5a40b98d45ddd2ebe0beec018e6d0c663c43bad6210e4da3' 'SKIP' 'ff0156309470fc1d378fd2e104338020a884295e285972cc88e250e031cc35b9' '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776' - 'c8344b94d946005b28ad1e0771c77174afd7288100763ab7bb7c2b50be52f1e0') + '63e37008fdbd0c3630db38b995d3be8891b9c2cabb46cb4dc3596ba988a259cd') prepare() { cd "${_pkgbase}-${pkgver}" - msg2 "Apply upstream commit to fix some EXA crashes" - patch -Np1 -i ../damageRegionProcessPending.diff + msg2 "Apply upstream fixes: + Revert \"damage: Make damageRegionProcessPending take a damage not a drawable\" + OS: return 0 from check_timers, if we touched any of them + Glamor: Trust eglGetPlatformDisplayEXT, if it exists" + patch -Np1 -i ../git-fixes.diff } build() { diff --git a/damageRegionProcessPending.diff b/git-fixes.diff index cf25c76895c6..fc379fe7c48d 100644 --- a/damageRegionProcessPending.diff +++ b/git-fixes.diff @@ -513,4 +513,102 @@ index 17c2abf..d6a3614 100644 -- cgit v0.10.2 +From 1b42f9505ff3a39b441464f553442079b750fe88 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer <peter.hutterer@who-t.net> +Date: Thu, 8 Dec 2016 14:32:06 +1000 +Subject: os: return 0 from check_timers if we touched any of them + +Fixes a regression introduced in 0b2f30834b1a9f. If a driver posts input +events during a timer function (wacom and synaptics do this during tap +timeouts), ProcessInputEvents() is not called for these events. There are no +new events on any fds, so the events just sit in the queue waiting for +something else to happen. + +Fix this by simply returning 0 from check_timers if we ran at least one of +them or reset them all. This way the callers ospoll_wait will exit and +continue with normal processing. + +Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> +Reviewed-by: Keith Packard <keithp@keithp.com> + +diff --git a/os/WaitFor.c b/os/WaitFor.c +index ff1c85e..613608f 100644 +--- a/os/WaitFor.c ++++ b/os/WaitFor.c +@@ -143,7 +143,7 @@ check_timers(void) + { + OsTimerPtr timer; + +- while ((timer = first_timer()) != NULL) { ++ if ((timer = first_timer()) != NULL) { + CARD32 now = GetTimeInMillis(); + int timeout = timer->expires - now; + +@@ -157,6 +157,8 @@ check_timers(void) + /* time has rewound. reset the timers. */ + CheckAllTimers(); + } ++ ++ return 0; + } + return -1; + } +-- +cgit v0.10.2 + +From 05e19644250698aa126a60bc671e85425df784d1 Mon Sep 17 00:00:00 2001 +From: Hans De Goede <hdegoede@redhat.com> +Date: Tue, 20 Dec 2016 13:00:43 +0100 +Subject: glamor: Trust eglGetPlatformDisplayEXT if it exists + +If the libEGL we are using has eglGetPlatformDisplayEXT, yet it still +returns NULL, then this very likely means that it does not support the +type (e.g. EGL_PLATFORM_GBM_MESA) passed in, and then returning NULL is +the right thing to do. + +This avoids falling back to an eglGetDisplay() implementation which does +not understands the passed in gbm handle, treats it as a pointer to +something else completely, followed by a crash sooner or later. + +Specifically this fixes using the nvidia binary driver, with nvidia's +libEGL + the modesetting driver on a secondary GPU crashing inside +glamor_egl_init() sometimes. + +Cc: Eric Anholt <eric@anholt.net> +Reviewed-by: Adam Jackson <ajax@redhat.com> +Signed-off-by: Hans de Goede <hdegoede@redhat.com> + +diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c +index 9cc0f8d..4bde637 100644 +--- a/glamor/glamor_egl.c ++++ b/glamor/glamor_egl.c +@@ -769,6 +769,10 @@ glamor_egl_init(ScrnInfoPtr scrn, int fd) + + glamor_egl->display = glamor_egl_get_display(EGL_PLATFORM_GBM_MESA, + glamor_egl->gbm); ++ if (!glamor_egl->display) { ++ xf86DrvMsg(scrn->scrnIndex, X_ERROR, "eglGetDisplay() failed\n"); ++ goto error; ++ } + #else + glamor_egl->display = eglGetDisplay((EGLNativeDisplayType) (intptr_t) fd); + #endif +diff --git a/glamor/glamor_egl.h b/glamor/glamor_egl.h +index 6b05f57..2c6d307 100644 +--- a/glamor/glamor_egl.h ++++ b/glamor/glamor_egl.h +@@ -67,9 +67,7 @@ glamor_egl_get_display(EGLint type, void *native) + PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplayEXT = + (void *) eglGetProcAddress("eglGetPlatformDisplayEXT"); + if (getPlatformDisplayEXT) +- dpy = getPlatformDisplayEXT(type, native, NULL); +- if (dpy) +- return dpy; ++ return getPlatformDisplayEXT(type, native, NULL); + } + + /* Welp, everything is awful. */ +-- +cgit v0.10.2 + |