diff options
-rw-r--r-- | .SRCINFO | 30 | ||||
-rw-r--r-- | 0001-dix-Add-unaccelerated-valuators-to-the-ValuatorMask.patch | 210 | ||||
-rw-r--r-- | 0001-os-make-sure-the-clientsWritable-fd_set-is-initializ.patch | 63 | ||||
-rw-r--r-- | 0002-dix-hook-up-the-unaccelerated-valuator-masks.patch | 134 | ||||
-rw-r--r-- | PKGBUILD | 35 | ||||
-rw-r--r-- | freedesktop-bug-865.patch | 89 | ||||
-rw-r--r-- | nvidia-drm-outputclass.conf | 6 | ||||
-rw-r--r-- | v2-Xorg.wrap-activate-libdrm-based-detection-for-KMS-drivers.patch | 12 |
8 files changed, 83 insertions, 496 deletions
@@ -1,9 +1,10 @@ pkgbase = xorg-server-bug865 - pkgver = 1.17.4 - pkgrel = 2 + pkgver = 1.18.0 + pkgrel = 3 url = http://xorg.freedesktop.org arch = i686 arch = x86_64 + groups = xorg license = custom makedepends = pixman makedepends = libx11 @@ -52,29 +53,24 @@ pkgbase = xorg-server-bug865 makedepends = dri3proto makedepends = libxshmfence makedepends = libunwind - source = http://xorg.freedesktop.org/releases/individual/xserver/xorg-server-1.17.4.tar.bz2 - source = http://xorg.freedesktop.org/releases/individual/xserver/xorg-server-1.17.4.tar.bz2.sig - source = nvidia-drm-outputclass.conf + source = http://xorg.freedesktop.org/releases/individual/xserver/xorg-server-1.18.0.tar.bz2 + source = http://xorg.freedesktop.org/releases/individual/xserver/xorg-server-1.18.0.tar.bz2.sig source = xvfb-run source = xvfb-run.1 - source = 0001-dix-Add-unaccelerated-valuators-to-the-ValuatorMask.patch - source = 0002-dix-hook-up-the-unaccelerated-valuator-masks.patch source = 0001-systemd-logind-do-not-rely-on-directed-signals.patch + source = v2-Xorg.wrap-activate-libdrm-based-detection-for-KMS-drivers.patch source = freedesktop-bug-865.patch - sha256sums = 0c4b45c116a812a996eb432d8508cf26c2ec8c3916ff2a50781796882f8d6457 + sha256sums = 195670819695d9cedd8dde95fbe069be0d0f488a77797a2d409f9f702daf312e sha256sums = SKIP - sha256sums = af1c3d2ea5de7f6a6b5f7c60951a189a4749d1495e5462f3157ae7ac8fe1dc56 sha256sums = ff0156309470fc1d378fd2e104338020a884295e285972cc88e250e031cc35b9 sha256sums = 2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776 - sha256sums = 3dc795002b8763a7d29db94f0af200131da9ce5ffc233bfd8916060f83a8fad7 - sha256sums = 416a1422eed71efcebb1d893de74e7f27e408323a56c4df003db37f5673b3f96 sha256sums = 3d7edab3a54d647e7d924b29d29f91b50212f308fcb1853a5aacd3181f58276c - sha256sums = ad64fd593cd4cdfdd830c4295ebe1acd4259e45cfc12a258a162ecdbb11fd7ca + sha256sums = c8addd0dc6d91797e82c51b539317efa271cd7997609e026c7c8e3884c5f601c + sha256sums = dad4bbadda03db2fe7046c43d838afd5e41f98c821fdac0908f0f20493caa660 pkgname = xorg-server-bug865 pkgdesc = Xorg X server with the patch for freedesktop bug 865 (need to kick hotkeys on release, not press) install = xorg-server.install - groups = xorg depends = libepoxy depends = libxdmcp depends = libxfont @@ -84,14 +80,14 @@ pkgname = xorg-server-bug865 depends = libgcrypt depends = libxau depends = xorg-server-common - depends = xf86-input-evdev depends = libxshmfence depends = libgl - provides = X-ABI-VIDEODRV_VERSION=19 - provides = X-ABI-XINPUT_VERSION=21.1 + depends = xf86-input-driver + provides = X-ABI-VIDEODRV_VERSION=20 + provides = X-ABI-XINPUT_VERSION=22.1 provides = X-ABI-EXTENSION_VERSION=9.0 provides = x-server - provides = xorg-server=1.17.1 + provides = xorg-server=1.18.0 conflicts = nvidia-utils<=331.20 conflicts = glamor-egl conflicts = xf86-video-modesetting diff --git a/0001-dix-Add-unaccelerated-valuators-to-the-ValuatorMask.patch b/0001-dix-Add-unaccelerated-valuators-to-the-ValuatorMask.patch deleted file mode 100644 index 86744f1402ea..000000000000 --- a/0001-dix-Add-unaccelerated-valuators-to-the-ValuatorMask.patch +++ /dev/null @@ -1,210 +0,0 @@ -From e1a7f4bb5333b0271d29f785eb55f1c3273e626a Mon Sep 17 00:00:00 2001 -From: Peter Hutterer <peter.hutterer@who-t.net> -Date: Tue, 5 May 2015 14:18:54 +1000 -Subject: [PATCH] dix: Add unaccelerated valuators to the ValuatorMask - -Allows a mask to carry both accelerated and unaccelerated motion at the same -time. - -This is required for xf86-input-libinput where the pointer acceleration -happens in libinput already, but parts of the server, specifically raw events -and DGA rely on device-specific unaccelerated data. - -To ease integration add this as a second set to the ValuatorMask rather than -extending all APIs to carry a second, possibly NULL set of valuators. - -Note that a valuator mask should only be used in either accel/unaccel or -standard mode at any time. Switching requires either a valuator_mask_zero() -call or unsetting all valuators one-by-one. Trying to mix the two will produce -a warning. - -The server has a shortcut for changing a mask with the -valuator_mask_drop_unaccelerated() call. This saves us from having to loop -through all valuators on every event, we can just drop the bits we know we -don't want. - -Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> -Reviewed-by: Hans de Goede <hdegoede@redhat.com> ---- - dix/inpututils.c | 82 +++++++++++++++++++++++++++++++++++++++--- - hw/xfree86/common/xf86Module.h | 2 +- - include/input.h | 15 ++++++++ - include/inpututils.h | 2 ++ - 4 files changed, 95 insertions(+), 6 deletions(-) - -diff --git a/dix/inpututils.c b/dix/inpututils.c -index 5c2a32d..1363988 100644 ---- a/dix/inpututils.c -+++ b/dix/inpututils.c -@@ -505,11 +505,8 @@ valuator_mask_isset(const ValuatorMask *mask, int valuator) - return mask->last_bit >= valuator && BitIsOn(mask->mask, valuator); - } - --/** -- * Set the valuator to the given floating-point data. -- */ --void --valuator_mask_set_double(ValuatorMask *mask, int valuator, double data) -+static inline void -+_valuator_mask_set_double(ValuatorMask *mask, int valuator, double data) - { - mask->last_bit = max(valuator, mask->last_bit); - SetBit(mask->mask, valuator); -@@ -517,6 +514,17 @@ valuator_mask_set_double(ValuatorMask *mask, int valuator, double data) - } - - /** -+ * Set the valuator to the given floating-point data. -+ */ -+void -+valuator_mask_set_double(ValuatorMask *mask, int valuator, double data) -+{ -+ BUG_WARN_MSG(mask->has_unaccelerated, -+ "Do not mix valuator types, zero mask first\n"); -+ _valuator_mask_set_double(mask, valuator, data); -+} -+ -+/** - * Set the valuator to the given integer data. - */ - void -@@ -594,11 +602,15 @@ valuator_mask_unset(ValuatorMask *mask, int valuator) - - ClearBit(mask->mask, valuator); - mask->valuators[valuator] = 0.0; -+ mask->unaccelerated[valuator] = 0.0; - - for (i = 0; i <= mask->last_bit; i++) - if (valuator_mask_isset(mask, i)) - lastbit = max(lastbit, i); - mask->last_bit = lastbit; -+ -+ if (mask->last_bit == -1) -+ mask->has_unaccelerated = FALSE; - } - } - -@@ -611,6 +623,66 @@ valuator_mask_copy(ValuatorMask *dest, const ValuatorMask *src) - valuator_mask_zero(dest); - } - -+Bool -+valuator_mask_has_unaccelerated(const ValuatorMask *mask) -+{ -+ return mask->has_unaccelerated; -+} -+ -+void -+valuator_mask_drop_unaccelerated(ValuatorMask *mask) -+{ -+ memset(mask->unaccelerated, 0, sizeof(mask->unaccelerated)); -+ mask->has_unaccelerated = FALSE; -+} -+ -+/** -+ * Set both accelerated and unaccelerated value for this mask. -+ */ -+void -+valuator_mask_set_unaccelerated(ValuatorMask *mask, -+ int valuator, -+ double accel, -+ double unaccel) -+{ -+ BUG_WARN_MSG(mask->last_bit != -1 && !mask->has_unaccelerated, -+ "Do not mix valuator types, zero mask first\n"); -+ _valuator_mask_set_double(mask, valuator, accel); -+ mask->has_unaccelerated = TRUE; -+ mask->unaccelerated[valuator] = unaccel; -+} -+ -+double -+valuator_mask_get_accelerated(const ValuatorMask *mask, -+ int valuator) -+{ -+ return valuator_mask_get_double(mask, valuator); -+} -+ -+double -+valuator_mask_get_unaccelerated(const ValuatorMask *mask, -+ int valuator) -+{ -+ return mask->unaccelerated[valuator]; -+} -+ -+Bool -+valuator_mask_fetch_unaccelerated(const ValuatorMask *mask, -+ int valuator, -+ double *accel, -+ double *unaccel) -+{ -+ if (valuator_mask_isset(mask, valuator)) { -+ if (accel) -+ *accel = valuator_mask_get_accelerated(mask, valuator); -+ if (unaccel) -+ *unaccel = valuator_mask_get_unaccelerated(mask, valuator); -+ return TRUE; -+ } -+ else -+ return FALSE; -+} -+ - int - CountBits(const uint8_t * mask, int len) - { -diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h -index e68fe9c..6133641 100644 ---- a/hw/xfree86/common/xf86Module.h -+++ b/hw/xfree86/common/xf86Module.h -@@ -81,7 +81,7 @@ typedef enum { - */ - #define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4) - #define ABI_VIDEODRV_VERSION SET_ABI_VERSION(19, 0) --#define ABI_XINPUT_VERSION SET_ABI_VERSION(21, 0) -+#define ABI_XINPUT_VERSION SET_ABI_VERSION(21, 1) - #define ABI_EXTENSION_VERSION SET_ABI_VERSION(9, 0) - #define ABI_FONT_VERSION SET_ABI_VERSION(0, 6) - -diff --git a/include/input.h b/include/input.h -index bf22dc7..0a4c4f7 100644 ---- a/include/input.h -+++ b/include/input.h -@@ -674,6 +674,21 @@ extern _X_EXPORT Bool valuator_mask_fetch(const ValuatorMask *mask, - extern _X_EXPORT Bool valuator_mask_fetch_double(const ValuatorMask *mask, - int valnum, double *val); - -+extern _X_EXPORT Bool valuator_mask_has_unaccelerated(const ValuatorMask *mask); -+extern _X_EXPORT void valuator_mask_set_unaccelerated(ValuatorMask *mask, -+ int valuator, -+ double accel, -+ double unaccel); -+extern _X_EXPORT double valuator_mask_get_accelerated(const ValuatorMask *mask, -+ int valuator); -+extern _X_EXPORT double valuator_mask_get_unaccelerated(const ValuatorMask *mask, -+ int valuator); -+extern _X_EXPORT Bool valuator_mask_fetch_unaccelerated(const ValuatorMask *mask, -+ int valuator, -+ double *accel, -+ double *unaccel); -+extern _X_HIDDEN void valuator_mask_drop_unaccelerated(ValuatorMask *mask); -+ - /* InputOption handling interface */ - extern _X_EXPORT InputOption *input_option_new(InputOption *list, - const char *key, -diff --git a/include/inpututils.h b/include/inpututils.h -index 53c96ba..4e90815 100644 ---- a/include/inpututils.h -+++ b/include/inpututils.h -@@ -36,8 +36,10 @@ extern Mask event_filters[MAXDEVICES][MAXEVENTS]; - - struct _ValuatorMask { - int8_t last_bit; /* highest bit set in mask */ -+ int8_t has_unaccelerated; - uint8_t mask[(MAX_VALUATORS + 7) / 8]; - double valuators[MAX_VALUATORS]; /* valuator data */ -+ double unaccelerated[MAX_VALUATORS]; /* valuator data */ - }; - - extern void verify_internal_event(const InternalEvent *ev); --- -2.4.1 - diff --git a/0001-os-make-sure-the-clientsWritable-fd_set-is-initializ.patch b/0001-os-make-sure-the-clientsWritable-fd_set-is-initializ.patch deleted file mode 100644 index b3a7d2ed5e00..000000000000 --- a/0001-os-make-sure-the-clientsWritable-fd_set-is-initializ.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 7cc7ffd25d5e50b54cb942d07d4cb160f20ff9c5 Mon Sep 17 00:00:00 2001 -From: Martin Peres <martin.peres@linux.intel.com> -Date: Fri, 17 Jul 2015 17:21:26 +0300 -Subject: [PATCH] os: make sure the clientsWritable fd_set is initialized - before use - -In WaitForSomething(), the fd_set clientsWritable may be used unitialized when -the boolean AnyClientsWriteBlocked is set in the WakeupHandler(). This leads to -a crash in FlushAllOutput() after x11proto's commit -2c94cdb453bc641246cc8b9a876da9799bee1ce7. - -The problem did not manifest before because both the XFD_SIZE and the maximum -number of clients were set to 256. As the connectionTranslation table was -initalized for the 256 clients to 0, the test on the index not being 0 was -aborting before dereferencing the client #0. - -As of commit 2c94cdb453bc641246cc8b9a876da9799bee1ce7 in x11proto, the XFD_SIZE -got bumped to 512. This lead the OutputPending fd_set to have any fd above 256 -to be uninitialized which in turns lead to reading an index after the end of -the ConnectionTranslation table. This index would then be used to find the -client corresponding to the fd marked as pending writes and would also result -to an out-of-bound access which would usually be the fatal one. - -Fix this by zeroing the clientsWritable fd_set at the beginning of -WaitForSomething(). In this case, the bottom part of the loop, which would -indirectly call FlushAllOutput, will not do any work but the next call to -select will result in the execution of the right codepath. This is exactly what -we want because we need to know the writable clients before handling them. In -the end, it also makes sure that the fds above MaxClient are initialized, -preventing the crash in FlushAllOutput(). - -Thanks to everyone involved in tracking this one down! - -Reported-by: Karol Herbst <freedesktop@karolherbst.de> -Reported-by: Tobias Klausmann <tobias.klausmann@mni.thm.de> -Signed-off-by: Martin Peres <martin.peres@linux.intel.com> -Tested-by: Martin Peres <martin.peres@linux.intel.com> -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91316 -Cc: Ilia Mirkin <imirkin@alum.mit.edu> -Cc: Martin Peres <martin.peres@linux.intel.com> -Cc: Olivier Fourdan <ofourdan@redhat.com -Cc: Adam Jackson <ajax@redhat.com> -Cc: Alan Coopersmith <alan.coopersmith@oracle.com -Cc: Chris Wilson <chris@chris-wilson.co.uk> ---- - os/WaitFor.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/os/WaitFor.c b/os/WaitFor.c -index 431f1a6..993c14e 100644 ---- a/os/WaitFor.c -+++ b/os/WaitFor.c -@@ -158,6 +158,7 @@ WaitForSomething(int *pClientsReady) - Bool someReady = FALSE; - - FD_ZERO(&clientsReadable); -+ FD_ZERO(&clientsWritable); - - if (nready) - SmartScheduleStopTimer(); --- -2.4.5 - diff --git a/0002-dix-hook-up-the-unaccelerated-valuator-masks.patch b/0002-dix-hook-up-the-unaccelerated-valuator-masks.patch deleted file mode 100644 index 6b8b1e5b5d73..000000000000 --- a/0002-dix-hook-up-the-unaccelerated-valuator-masks.patch +++ /dev/null @@ -1,134 +0,0 @@ -From 7504fbd2239257f1a00a1a15d02862eea81f167c Mon Sep 17 00:00:00 2001 -From: Peter Hutterer <peter.hutterer@who-t.net> -Date: Tue, 5 May 2015 14:48:41 +1000 -Subject: [PATCH] dix: hook up the unaccelerated valuator masks - -If present, access the unaccelerated valuator mask values for DGA and XI2 raw -events. - -Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> -Reviewed-by: Hans de Goede <hdegoede@redhat.com> ---- - dix/getevents.c | 31 ++++++++++++++++++++++--------- - hw/xfree86/common/xf86Xinput.c | 4 ++++ - 2 files changed, 26 insertions(+), 9 deletions(-) - -diff --git a/dix/getevents.c b/dix/getevents.c -index 6fb12c5..64bf76e 100644 ---- a/dix/getevents.c -+++ b/dix/getevents.c -@@ -213,14 +213,25 @@ init_raw(DeviceIntPtr dev, RawDeviceEvent *event, Time ms, int type, int detail) - } - - static void --set_raw_valuators(RawDeviceEvent *event, ValuatorMask *mask, double *data) -+set_raw_valuators(RawDeviceEvent *event, ValuatorMask *mask, -+ BOOL use_unaccel, double *data) - { - int i; - -+ use_unaccel = use_unaccel && valuator_mask_has_unaccelerated(mask); -+ - for (i = 0; i < valuator_mask_size(mask); i++) { - if (valuator_mask_isset(mask, i)) { -+ double v; -+ - SetBit(event->valuators.mask, i); -- data[i] = valuator_mask_get_double(mask, i); -+ -+ if (use_unaccel) -+ v = valuator_mask_get_unaccelerated(mask, i); -+ else -+ v = valuator_mask_get_double(mask, i); -+ -+ data[i] = v; - } - } - } -@@ -1138,11 +1149,11 @@ GetKeyboardEvents(InternalEvent *events, DeviceIntPtr pDev, int type, - valuator_mask_copy(&mask, mask_in); - - init_raw(pDev, raw, ms, type, key_code); -- set_raw_valuators(raw, &mask, raw->valuators.data_raw); -+ set_raw_valuators(raw, &mask, TRUE, raw->valuators.data_raw); - - clipValuators(pDev, &mask); - -- set_raw_valuators(raw, &mask, raw->valuators.data); -+ set_raw_valuators(raw, &mask, FALSE, raw->valuators.data); - - event = &events->device_event; - init_device_event(event, pDev, ms); -@@ -1423,9 +1434,11 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type, - num_events++; - - init_raw(pDev, raw, ms, type, buttons); -- set_raw_valuators(raw, &mask, raw->valuators.data_raw); -+ set_raw_valuators(raw, &mask, TRUE, raw->valuators.data_raw); - } - -+ valuator_mask_drop_unaccelerated(&mask); -+ - /* valuators are in driver-native format (rel or abs) */ - - if (flags & POINTER_ABSOLUTE) { -@@ -1438,7 +1451,7 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type, - transformAbsolute(pDev, &mask); - clipAbsolute(pDev, &mask); - if ((flags & POINTER_NORAW) == 0 && raw) -- set_raw_valuators(raw, &mask, raw->valuators.data); -+ set_raw_valuators(raw, &mask, FALSE, raw->valuators.data); - } - else { - transformRelative(pDev, &mask); -@@ -1446,7 +1459,7 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type, - if (flags & POINTER_ACCELERATE) - accelPointer(pDev, &mask, ms); - if ((flags & POINTER_NORAW) == 0 && raw) -- set_raw_valuators(raw, &mask, raw->valuators.data); -+ set_raw_valuators(raw, &mask, FALSE, raw->valuators.data); - - moveRelative(pDev, flags, &mask); - } -@@ -1951,7 +1964,7 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid, - events++; - num_events++; - init_raw(dev, raw, ms, type, client_id); -- set_raw_valuators(raw, &mask, raw->valuators.data_raw); -+ set_raw_valuators(raw, &mask, TRUE, raw->valuators.data_raw); - } - - event = &events->device_event; -@@ -2013,7 +2026,7 @@ GetTouchEvents(InternalEvent *events, DeviceIntPtr dev, uint32_t ddx_touchid, - screeny = dev->spriteInfo->sprite->hotPhys.y; - } - if (need_rawevent) -- set_raw_valuators(raw, &mask, raw->valuators.data); -+ set_raw_valuators(raw, &mask, FALSE, raw->valuators.data); - - /* Indirect device touch coordinates are not used for cursor positioning. - * They are merely informational, and are provided in device coordinates. -diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c -index 1fb5b16..5ce4c71 100644 ---- a/hw/xfree86/common/xf86Xinput.c -+++ b/hw/xfree86/common/xf86Xinput.c -@@ -1137,12 +1137,16 @@ xf86CheckMotionEvent4DGA(DeviceIntPtr device, int is_absolute, - dx = valuator_mask_get(mask, 0); - if (is_absolute) - dx -= device->last.valuators[0]; -+ else if (valuator_mask_has_unaccelerated(mask)) -+ dx = valuator_mask_get_unaccelerated(mask, 0); - } - - if (valuator_mask_isset(mask, 1)) { - dy = valuator_mask_get(mask, 1); - if (is_absolute) - dy -= device->last.valuators[1]; -+ else if (valuator_mask_has_unaccelerated(mask)) -+ dy = valuator_mask_get_unaccelerated(mask, 1); - } - - if (DGAStealMotionEvent(device, idx, dx, dy)) --- -2.4.1 - @@ -4,10 +4,11 @@ pkgbase=xorg-server-bug865 pkgname=xorg-server-bug865 -pkgver=1.17.4 -pkgrel=2 # build first with 0.1 and then rebuild it after xf86-input-evdev rebuild +pkgver=1.18.0 +pkgrel=3 # build first with 0.1 and then rebuild it after xf86-input-evdev rebuild arch=('i686' 'x86_64') license=('custom') +groups=('xorg') url="http://xorg.freedesktop.org" makedepends=('pixman' 'libx11' 'mesa' 'mesa-libgl' 'xf86driproto' 'xcmiscproto' 'xtrans' 'bigreqsproto' 'randrproto' 'inputproto' 'fontsproto' 'videoproto' 'presentproto' 'compositeproto' 'recordproto' 'scrnsaverproto' @@ -15,37 +16,33 @@ makedepends=('pixman' 'libx11' 'mesa' 'mesa-libgl' 'xf86driproto' 'xcmiscproto' 'xf86dgaproto' 'libxmu' 'libxrender' 'libxi' 'dmxproto' 'libxaw' 'libdmx' 'libxtst' 'libxres' 'xorg-xkbcomp' 'xorg-util-macros' 'xorg-font-util' 'glproto' 'dri2proto' 'libgcrypt' 'libepoxy' 'xcb-util' 'xcb-util-image' 'xcb-util-renderutil' 'xcb-util-wm' 'xcb-util-keysyms' 'dri3proto' - 'libxshmfence' 'libunwind') + 'libxshmfence' 'libunwind') source=(${url}/releases/individual/xserver/xorg-server-${pkgver}.tar.bz2{,.sig} - nvidia-drm-outputclass.conf xvfb-run xvfb-run.1 - 0001-dix-Add-unaccelerated-valuators-to-the-ValuatorMask.patch - 0002-dix-hook-up-the-unaccelerated-valuator-masks.patch 0001-systemd-logind-do-not-rely-on-directed-signals.patch + v2-Xorg.wrap-activate-libdrm-based-detection-for-KMS-drivers.patch freedesktop-bug-865.patch) validpgpkeys=('7B27A3F1A6E18CD9588B4AE8310180050905E40C' 'C383B778255613DFDB409D91DB221A6900000011' 'DD38563A8A8224537D1F90E45B8A2D50A0ECD0D3') -sha256sums=('0c4b45c116a812a996eb432d8508cf26c2ec8c3916ff2a50781796882f8d6457' +sha256sums=('195670819695d9cedd8dde95fbe069be0d0f488a77797a2d409f9f702daf312e' 'SKIP' - 'af1c3d2ea5de7f6a6b5f7c60951a189a4749d1495e5462f3157ae7ac8fe1dc56' 'ff0156309470fc1d378fd2e104338020a884295e285972cc88e250e031cc35b9' '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776' - '3dc795002b8763a7d29db94f0af200131da9ce5ffc233bfd8916060f83a8fad7' - '416a1422eed71efcebb1d893de74e7f27e408323a56c4df003db37f5673b3f96' '3d7edab3a54d647e7d924b29d29f91b50212f308fcb1853a5aacd3181f58276c' - 'ad64fd593cd4cdfdd830c4295ebe1acd4259e45cfc12a258a162ecdbb11fd7ca') + 'c8addd0dc6d91797e82c51b539317efa271cd7997609e026c7c8e3884c5f601c' + 'dad4bbadda03db2fe7046c43d838afd5e41f98c821fdac0908f0f20493caa660') prepare() { cd "xorg-server-${pkgver}" - # fix FS#45229, merged upstream - patch -Np1 -i ../0001-dix-Add-unaccelerated-valuators-to-the-ValuatorMask.patch - patch -Np1 -i ../0002-dix-hook-up-the-unaccelerated-valuator-masks.patch # fix VT switching with kdbus; from upstream patch -Np1 -i ../0001-systemd-logind-do-not-rely-on-directed-signals.patch + # fix xorg only working with root FS#47061 + patch -Np1 -i ../v2-Xorg.wrap-activate-libdrm-based-detection-for-KMS-drivers.patch + # The patch for freedesktop bug 865 patch -Np1 -i "${srcdir}/freedesktop-bug-865.patch" @@ -67,9 +64,7 @@ build() { --enable-xephyr \ --enable-glamor \ --enable-xwayland \ - --enable-glx-tls \ --enable-kdrive \ - --enable-kdrive-evdev \ --enable-kdrive-kbd \ --enable-kdrive-mouse \ --enable-config-udev \ @@ -104,11 +99,10 @@ build() { package_xorg-server-bug865() { pkgdesc="Xorg X server with the patch for freedesktop bug 865 (need to kick hotkeys on release, not press)" - depends=(libepoxy libxdmcp libxfont libpciaccess libdrm pixman libgcrypt libxau xorg-server-common xf86-input-evdev libxshmfence libgl) + depends=(libepoxy libxdmcp libxfont libpciaccess libdrm pixman libgcrypt libxau xorg-server-common libxshmfence libgl xf86-input-driver) # see xorg-server-*/hw/xfree86/common/xf86Module.h for ABI versions - we provide major numbers that drivers can depend on # and /usr/lib/pkgconfig/xorg-server.pc in xorg-server-devel pkg - provides=('X-ABI-VIDEODRV_VERSION=19' 'X-ABI-XINPUT_VERSION=21.1' 'X-ABI-EXTENSION_VERSION=9.0' 'x-server' 'xorg-server=1.17.1') - groups=('xorg') + provides=('X-ABI-VIDEODRV_VERSION=20' 'X-ABI-XINPUT_VERSION=22.1' 'X-ABI-EXTENSION_VERSION=9.0' 'x-server' 'xorg-server=1.18.0') conflicts=('nvidia-utils<=331.20' 'glamor-egl' 'xf86-video-modesetting' 'xorg-server') replaces=('glamor-egl' 'xf86-video-modesetting') install=xorg-server.install @@ -118,7 +112,6 @@ package_xorg-server-bug865() { # distro specific files must be installed in /usr/share/X11/xorg.conf.d install -m755 -d "${pkgdir}/etc/X11/xorg.conf.d" - install -m644 "${srcdir}/nvidia-drm-outputclass.conf" "${pkgdir}/usr/share/X11/xorg.conf.d/" # Needed for non-mesa drivers, libgl will restore it mv "${pkgdir}/usr/lib/xorg/modules/extensions/libglx.so" \ @@ -135,6 +128,4 @@ package_xorg-server-bug865() { rm -rf "${pkgdir}/usr/lib/pkgconfig" rm -rf "${pkgdir}/usr/include" rm -rf "${pkgdir}/usr/share/aclocal" - # this is now part of xorg-input-evdev - rm -rf "${pkgdir}/usr/share/X11/xorg.conf.d/10-evdev.conf" } diff --git a/freedesktop-bug-865.patch b/freedesktop-bug-865.patch index cd4d644ad668..e3a9839530ee 100644 --- a/freedesktop-bug-865.patch +++ b/freedesktop-bug-865.patch @@ -1,6 +1,6 @@ ---- xorg-server-1.14.0/xkb/xkbActions.c.orig 2013-02-08 20:50:40.000000000 +0400 -+++ xorg-server-1.14.0/xkb/xkbActions.c 2013-03-18 22:00:20.113844672 +0400 -@@ -339,23 +339,82 @@ +--- xorg-server-1.18.0/xkb/xkbActions.c.orig 2015-11-22 18:31:15.749839635 +0300 ++++ xorg-server-1.18.0/xkb/xkbActions.c 2015-11-22 18:39:39.621861737 +0300 +@@ -351,26 +351,83 @@ return 1; } @@ -14,7 +14,7 @@ +{ + XkbGroupAction ga = pAction->group; + if (ga.flags&XkbSA_GroupAbsolute) -+ xkbi->state.locked_group= XkbSAGroup(&ga); ++ xkbi->state.locked_group= XkbSAGroup(&ga); + else xkbi->state.locked_group+= XkbSAGroup(&ga); +} + @@ -22,64 +22,65 @@ + static int -_XkbFilterLockState(XkbSrvInfoPtr xkbi, -+_XkbFilterLockGroup( XkbSrvInfoPtr xkbi, ++_XkbFilterLockGroup(XkbSrvInfoPtr xkbi, XkbFilterPtr filter, unsigned keycode, XkbAction *pAction) { ++ int sendEvent = 1; ++ + if (filter->keycode == 0) /* initial press */ + AccessXCancelRepeatKey(xkbi, keycode); + - if (pAction && (pAction->type == XkbSA_LockGroup)) { - if (pAction->group.flags & XkbSA_GroupAbsolute) - xkbi->state.locked_group = XkbSAGroup(&pAction->group); - else - xkbi->state.locked_group += XkbSAGroup(&pAction->group); - return 1; -+ -+ int sendEvent = 1; -+ + if (!xkbSwitchGroupOnRelease()) { -+ xkbUpdateLockedGroup(xkbi, pAction); -+ return sendEvent; ++ xkbUpdateLockedGroup(xkbi, pAction); ++ return sendEvent; + } + + /* Delay switch till button release */ -+ if (filter->keycode==0) { /* initial press */ -+ filter->keycode = keycode; -+ filter->active = 1; -+ filter->filterOthers = 0; /* for what? */ -+ filter->filter = _XkbFilterLockGroup; ++ if (filter->keycode==0) { /* initial press */ ++ filter->keycode = keycode; ++ filter->active = 1; ++ filter->filterOthers = 0; /* for what? */ ++ filter->filter = _XkbFilterLockGroup; + -+ /* filter->priv = 0; */ -+ filter->upAction = *pAction; ++ /* filter->priv = 0; */ ++ filter->upAction = *pAction; + -+ /* Ok, now we need to simulate the action which would go if this action didn't block it. -+ XkbSA_SetMods is the one: it is to set modifier' flag up. */ -+ { -+ XkbStateRec fake_state = xkbi->state; -+ XkbAction act; ++ /* Ok, now we need to simulate the action which would go if this action didn't block it. ++ XkbSA_SetMods is the one: it is to set modifier' flag up. */ ++ { ++ XkbStateRec fake_state = xkbi->state; ++ XkbAction act; + -+ fake_state.mods = 0; -+ act = XkbGetKeyAction(xkbi, &fake_state, keycode); ++ fake_state.mods = 0; ++ act = XkbGetKeyAction(xkbi, &fake_state, keycode); + -+ /* KLUDGE: XkbSA_SetMods only? */ -+ if (act.type == XkbSA_SetMods) { -+ XkbFilterPtr filter = _XkbNextFreeFilter(xkbi); -+ sendEvent = _XkbFilterSetState(xkbi,filter,keycode,&act); -+ } -+ } ++ /* KLUDGE: XkbSA_SetMods only? */ ++ if (act.type == XkbSA_SetMods) { ++ XkbFilterPtr filter = _XkbNextFreeFilter(xkbi); ++ sendEvent = _XkbFilterSetState(xkbi,filter,keycode,&act); ++ } ++ } + } + else { -+ /* do nothing if some button else is pressed */ -+ if (!pAction) -+ xkbUpdateLockedGroup(xkbi, &filter->upAction); -+ filter->active = 0; ++ /* do nothing if some button else is pressed */ ++ if (!pAction) ++ xkbUpdateLockedGroup(xkbi, &filter->upAction); ++ filter->active = 0; } -+ + return sendEvent; +} + +static int -+_XkbFilterLockMods( XkbSrvInfoPtr xkbi, -+ XkbFilterPtr filter, -+ unsigned keycode, -+ XkbAction * pAction) ++_XkbFilterLockMods( XkbSrvInfoPtr xkbi, ++ XkbFilterPtr filter, ++ unsigned keycode, ++ XkbAction * pAction) +{ if (filter->keycode == 0) { /* initial press */ filter->keycode = keycode; @@ -91,17 +92,17 @@ filter->upAction = *pAction; if (!(filter->upAction.mods.flags & XkbSA_LockNoLock)) xkbi->state.locked_mods |= pAction->mods.mask; -@@ -1174,9 +1233,12 @@ +@@ -1250,9 +1307,12 @@ sendEvent = _XkbFilterLatchState(xkbi, filter, key, &act); break; case XkbSA_LockMods: -+ filter = _XkbNextFreeFilter(xkbi); -+ sendEvent=_XkbFilterLockMods(xkbi,filter,key,&act); -+ break; ++ filter = _XkbNextFreeFilter(xkbi); ++ sendEvent=_XkbFilterLockMods(xkbi,filter,key,&act); ++ break; case XkbSA_LockGroup: filter = _XkbNextFreeFilter(xkbi); - sendEvent = _XkbFilterLockState(xkbi, filter, key, &act); -+ sendEvent=_XkbFilterLockGroup(xkbi,filter,key,&act); ++ sendEvent = _XkbFilterLockGroup(xkbi,filter,key,&act); break; case XkbSA_ISOLock: filter = _XkbNextFreeFilter(xkbi); diff --git a/nvidia-drm-outputclass.conf b/nvidia-drm-outputclass.conf deleted file mode 100644 index 40c1e08b5f41..000000000000 --- a/nvidia-drm-outputclass.conf +++ /dev/null @@ -1,6 +0,0 @@ -Section "OutputClass" - Identifier "nvidia" - MatchDriver "nvidia-drm" - Driver "nvidia" -EndSection - diff --git a/v2-Xorg.wrap-activate-libdrm-based-detection-for-KMS-drivers.patch b/v2-Xorg.wrap-activate-libdrm-based-detection-for-KMS-drivers.patch new file mode 100644 index 000000000000..220c5bb55f70 --- /dev/null +++ b/v2-Xorg.wrap-activate-libdrm-based-detection-for-KMS-drivers.patch @@ -0,0 +1,12 @@ +diff --git a/hw/xfree86/xorg-wrapper.c b/hw/xfree86/xorg-wrapper.c +index 4c37cfc..d930962 100644 +--- a/hw/xfree86/xorg-wrapper.c ++++ b/hw/xfree86/xorg-wrapper.c +@@ -24,6 +24,7 @@ + */ + + #include "dix-config.h" ++#include "xorg-config.h" + + #include <errno.h> + #include <fcntl.h> |