debian/changelog | 11 + debian/patches/make-sure-hw-cursor-is-hidden-when-it-should.diff | 36 +++ debian/patches/os-treat-ssh-as-a-non-local-client.diff | 97 ++++++++++ debian/patches/present-only-requeue-for-next-msc-after-flip-fail.diff | 35 +++ debian/patches/revert-eb5108b870.diff | 35 --- debian/patches/series | 5 6 files changed, 183 insertions(+), 36 deletions(-)
New commits: commit fe1d88778d3940550f30b85a7323fc1e3935eaaa Author: Timo Aaltonen <tjaal...@debian.org> Date: Tue Mar 29 10:39:02 2016 +0300 release to unstable diff --git a/debian/changelog b/debian/changelog index 2374ba2..9169531 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -xorg-server (2:1.18.2-3) UNRELEASED; urgency=medium +xorg-server (2:1.18.2-3) unstable; urgency=medium * regression fixes part2: - replace revert-eb5108b870.diff with patch from upstream @@ -7,7 +7,7 @@ xorg-server (2:1.18.2-3) UNRELEASED; urgency=medium * os-treat-ssh-as-a-non-local-client.diff: Allow remote clients to work with DRI3. - -- Timo Aaltonen <tjaal...@debian.org> Tue, 29 Mar 2016 10:16:23 +0300 + -- Timo Aaltonen <tjaal...@debian.org> Tue, 29 Mar 2016 10:38:47 +0300 xorg-server (2:1.18.2-2) unstable; urgency=medium commit 99ea495eaeacfcbe5defa412d6922a0966c27c3a Author: Timo Aaltonen <tjaal...@debian.org> Date: Tue Mar 29 10:34:50 2016 +0300 more regression fixes, plus fix remote clients with DRI3 diff --git a/debian/changelog b/debian/changelog index 24902b1..2374ba2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,14 @@ +xorg-server (2:1.18.2-3) UNRELEASED; urgency=medium + + * regression fixes part2: + - replace revert-eb5108b870.diff with patch from upstream + - make-sure-hw-cursor-is-hidden-when-it-should.diff: Don't show an + extra cursor in some cases + * os-treat-ssh-as-a-non-local-client.diff: Allow remote clients to work + with DRI3. + + -- Timo Aaltonen <tjaal...@debian.org> Tue, 29 Mar 2016 10:16:23 +0300 + xorg-server (2:1.18.2-2) unstable; urgency=medium * regression fixes/workarounds: diff --git a/debian/patches/make-sure-hw-cursor-is-hidden-when-it-should.diff b/debian/patches/make-sure-hw-cursor-is-hidden-when-it-should.diff new file mode 100644 index 0000000..4e1b26b --- /dev/null +++ b/debian/patches/make-sure-hw-cursor-is-hidden-when-it-should.diff @@ -0,0 +1,36 @@ +commit 418fe365b45a143680d3b4143dc60f7cdc5a3507 +Author: Michel Dänzer <michel.daen...@amd.com> +Date: Thu Mar 24 17:34:23 2016 +0900 + + xfree86/modes: Make sure the HW cursor is hidden when it should be + + When the HW cursor is hidden (e.g. because xf86CursorResetCursor + triggers a switch from HW cursor to SW cursor), the driver isn't + notified of this for disabled CRTCs. If the HW cursor was shown when the + CRTC was disabled, it may still be displayed when the CRTC is enabled + again. + + Prevent this by explicitly hiding the HW cursor again after setting a + mode if it's currently supposed to be hidden. + + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94560 + Reviewed-by: Adam Jackson <a...@redhat.com> + Signed-off-by: Michel Dänzer <michel.daen...@amd.com> + +diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c +index 2639a30..6091b5e 100644 +--- a/hw/xfree86/modes/xf86Crtc.c ++++ b/hw/xfree86/modes/xf86Crtc.c +@@ -368,6 +368,12 @@ xf86CrtcSetModeTransform(xf86CrtcPtr crtc, DisplayModePtr mode, + xf86CrtcSetScreenSubpixelOrder(scrn->pScreen); + if (scrn->ModeSet) + scrn->ModeSet(scrn); ++ ++ /* Make sure the HW cursor is hidden if it's supposed to be, in case ++ * it was hidden while the CRTC was disabled ++ */ ++ if (!xf86_config->cursor_on) ++ xf86_hide_cursors(scrn); + } + else { + crtc->x = saved_x; diff --git a/debian/patches/os-treat-ssh-as-a-non-local-client.diff b/debian/patches/os-treat-ssh-as-a-non-local-client.diff new file mode 100644 index 0000000..0b879bf --- /dev/null +++ b/debian/patches/os-treat-ssh-as-a-non-local-client.diff @@ -0,0 +1,97 @@ +commit adefbaee499b9679c6cac21f52ec6545af2b36b5 +Author: Adam Jackson <a...@redhat.com> +Date: Mon Mar 28 18:11:09 2016 +0900 + + os: Treat ssh as a non-local client (v4) + + By the time we get to ComputeLocalClient, we've already done + NextAvailableClient → ReserveClientIds → DetermineClientCmd (assuming + we're built with #define CLIENTIDS), so we can look up the name of the + client process and refuse to treat ssh's X forwarding as if it were + local. + + v2: (Michel Dänzer) + * Only match "ssh" itself, not other executable names starting with + that prefix. + * Ignore executable path for the match. + v3: (Michel Dänzer) + * Use GetClientCmdName (Mark Kettenis) + * Perform check on Windows as well, but only ignore path on Cygwin + (Martin Peres, Emil Velikov, Jon Turney) + v4: (Michel Dänzer) + * Cut of any colon and whatever comes after it. (Adam Jackson) + * Add bugzilla reference. + + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93261 + + Signed-off-by: Adam Jackson <a...@redhat.com> + Signed-off-by: Michel Dänzer <michel.daen...@amd.com> + +diff --git a/os/access.c b/os/access.c +index 8b2177f..58f95a9 100644 +--- a/os/access.c ++++ b/os/access.c +@@ -173,6 +173,10 @@ SOFTWARE. + + #endif /* WIN32 */ + ++#if !defined(WIN32) || defined(__CYGWIN__) ++#include <libgen.h> ++#endif ++ + #define X_INCLUDE_NETDB_H + #include <X11/Xos_r.h> + +@@ -1080,9 +1084,8 @@ ResetHosts(const char *display) + } + } + +-/* Is client on the local host */ +-Bool +-ComputeLocalClient(ClientPtr client) ++static Bool ++xtransLocalClient(ClientPtr client) + { + int alen, family, notused; + Xtransaddr *from = NULL; +@@ -1115,6 +1118,40 @@ ComputeLocalClient(ClientPtr client) + return FALSE; + } + ++/* Is client on the local host */ ++Bool ++ComputeLocalClient(ClientPtr client) ++{ ++ const char *cmdname = GetClientCmdName(client); ++ ++ if (!xtransLocalClient(client)) ++ return FALSE; ++ ++ /* If the executable name is "ssh", assume that this client connection ++ * is forwarded from another host via SSH ++ */ ++ if (cmdname) { ++ char **cmd; ++ Bool ret; ++ ++ /* Cut off any colon and whatever comes after it, see ++ * https://lists.freedesktop.org/archives/xorg-devel/2015-December/048164.html ++ */ ++ cmd = xstrtokenize(cmdname, ":"); ++ ++#if !defined(WIN32) || defined(__CYGWIN__) ++ cmd[0] = basename(cmd[0]); ++#endif ++ ++ ret = strcmp(cmd[0], "ssh") != 0; ++ free(cmd); ++ ++ return ret; ++ } ++ ++ return TRUE; ++} ++ + /* + * Return the uid and all gids of a connected local client + * Allocates a LocalClientCredRec - caller must call FreeLocalClientCreds diff --git a/debian/patches/present-only-requeue-for-next-msc-after-flip-fail.diff b/debian/patches/present-only-requeue-for-next-msc-after-flip-fail.diff new file mode 100644 index 0000000..6794fc7 --- /dev/null +++ b/debian/patches/present-only-requeue-for-next-msc-after-flip-fail.diff @@ -0,0 +1,35 @@ +commit 3b385105b2d19a1c55e9779ae88d775185eea231 +Author: Michel Dänzer <michel.daen...@amd.com> +Date: Thu Mar 24 17:42:47 2016 +0900 + + present: Only requeue for next MSC after flip failure + + This code was added to deal with the driver present hook failing, in + which case we need to wait for the next MSC before executing the + presentation. + + However, it could also take effect in cases where the driver incorrectly + thinks the current MSC matches the target one (e.g. due to the kernel + interface only supporting 32-bit MSC values), in which case it could + result in the presentation getting requeued over and over. + + To prevent such issues, check specifically for the target MSC + immediately following the current MSC. + + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94596 + Signed-off-by: Michel Dänzer <michel.daen...@amd.com> + Reviewed-by: Keith Packard <kei...@keithp.com> + +diff --git a/present/present.c b/present/present.c +index 55f6aa7..105e2bf 100644 +--- a/present/present.c ++++ b/present/present.c +@@ -726,7 +726,7 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc) + } + + /* If present_flip failed, we may have to requeue for the target MSC */ +- if (msc_is_after(vblank->target_msc, crtc_msc) && ++ if (vblank->target_msc == crtc_msc + 1 && + Success == present_queue_vblank(screen, + vblank->crtc, + vblank->event_id, diff --git a/debian/patches/revert-eb5108b870.diff b/debian/patches/revert-eb5108b870.diff deleted file mode 100644 index 0b4e59d..0000000 --- a/debian/patches/revert-eb5108b870.diff +++ /dev/null @@ -1,35 +0,0 @@ -this reverts: - -commit eb5108b87017128f394ae31b5b7cd85dd8819bca -Author: Michel Dänzer <michel.daen...@amd.com> -Date: Wed Feb 24 16:52:58 2016 +0900 - - present: Requeue if flip driver hook fails and target MSC not reached - -some intel users suffer from frozen X because of it - -diff --git b/present/present.c a/present/present.c -index 7f9fc17..17ec526 100644 ---- b/present/present.c -+++ a/present/present.c -@@ -712,20 +712,6 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc) - if (window == screen_priv->flip_window) - present_unflip(screen); - } -- -- /* If present_flip failed, we may have to requeue for the target MSC */ -- if (msc_is_after(vblank->target_msc, crtc_msc) && -- Success == present_queue_vblank(screen, -- vblank->crtc, -- vblank->event_id, -- vblank->target_msc)) { -- xorg_list_add(&vblank->event_queue, &present_exec_queue); -- xorg_list_append(&vblank->window_list, -- &present_get_window_priv(window, TRUE)->vblank); -- vblank->queued = TRUE; -- return; -- } -- - present_copy_region(&window->drawable, vblank->pixmap, vblank->update, vblank->x_off, vblank->y_off); - - /* present_copy_region sticks the region into a scratch GC, diff --git a/debian/patches/series b/debian/patches/series index 5440ad0..4429400 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -9,4 +9,7 @@ # 1.18.2 regression fixes/workarounds vidmode-reduce-verbosity-of-getmodeline.diff glamor-swizzle-red-to-0-for-alpha-textures.diff -revert-eb5108b870.diff +present-only-requeue-for-next-msc-after-flip-fail.diff +make-sure-hw-cursor-is-hidden-when-it-should.diff + +os-treat-ssh-as-a-non-local-client.diff