SHA256
1
0
forked from pool/Mesa

Accepting request 611357 from home:tobijk:X11:XOrg

- Add patch U_dri3-Stricter-SBC-wraparound-handling.patch
  This fixes an error with timestamps, avoiding near infinite client
  hangs with the new X server 1.20 release and some clients, the most 
  prominent being plasmashell & steam
  Bugentry: FDO#106351

- Add patch U_dri3-Stricter-SBC-wraparound-handling.patch
  This fixes an error with timestamps, avoiding near infinite client
  hangs with the new X server 1.20 release and some clients, the most 
  prominent being plasmashell & steam
  Bugentry: FDO#106351

OBS-URL: https://build.opensuse.org/request/show/611357
OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=747
This commit is contained in:
Stefan Dirsch 2018-05-22 18:09:47 +00:00 committed by Git OBS Bridge
parent 9ad2e78211
commit 6c1c346b50
5 changed files with 72 additions and 0 deletions

View File

@ -1,3 +1,12 @@
-------------------------------------------------------------------
Tue May 22 16:08:15 UTC 2018 - tobias.johannes.klausmann@mni.thm.de
- Add patch U_dri3-Stricter-SBC-wraparound-handling.patch
This fixes an error with timestamps, avoiding near infinite client
hangs with the new X server 1.20 release and some clients, the most
prominent being plasmashell & steam
Bugentry: FDO#106351
------------------------------------------------------------------- -------------------------------------------------------------------
Tue May 22 08:44:11 UTC 2018 - msrb@suse.com Tue May 22 08:44:11 UTC 2018 - msrb@suse.com

View File

@ -140,6 +140,8 @@ Patch32: archlinux_glvnd-fix-gl-dot-pc.patch
Patch43: u_r600-egd_tables.py-make-the-script-python-2-3-compat.patch Patch43: u_r600-egd_tables.py-make-the-script-python-2-3-compat.patch
Patch44: u_intel_anv-make-scripts-python-2-3-compat.patch Patch44: u_intel_anv-make-scripts-python-2-3-compat.patch
Patch47: u_st-dri-don-t-set-queryDmaBufFormats-queryDmaBufModif.patch Patch47: u_st-dri-don-t-set-queryDmaBufFormats-queryDmaBufModif.patch
# Already upstream
Patch100: U_dri3-Stricter-SBC-wraparound-handling.patch
BuildRequires: autoconf >= 2.60 BuildRequires: autoconf >= 2.60
BuildRequires: automake BuildRequires: automake
@ -750,6 +752,7 @@ rm -rf docs/README.{VMS,WIN32,OS2}
%patch43 -p1 %patch43 -p1
%patch44 -p1 %patch44 -p1
%patch47 -p1 %patch47 -p1
%patch100 -p1
# Remove requires to libglvnd/libglvnd-devel from baselibs.conf when # Remove requires to libglvnd/libglvnd-devel from baselibs.conf when
# disabling libglvnd build; ugly ... # disabling libglvnd build; ugly ...

View File

@ -1,3 +1,12 @@
-------------------------------------------------------------------
Tue May 22 16:08:15 UTC 2018 - tobias.johannes.klausmann@mni.thm.de
- Add patch U_dri3-Stricter-SBC-wraparound-handling.patch
This fixes an error with timestamps, avoiding near infinite client
hangs with the new X server 1.20 release and some clients, the most
prominent being plasmashell & steam
Bugentry: FDO#106351
------------------------------------------------------------------- -------------------------------------------------------------------
Tue May 22 08:44:11 UTC 2018 - msrb@suse.com Tue May 22 08:44:11 UTC 2018 - msrb@suse.com

View File

@ -139,6 +139,8 @@ Patch32: archlinux_glvnd-fix-gl-dot-pc.patch
Patch43: u_r600-egd_tables.py-make-the-script-python-2-3-compat.patch Patch43: u_r600-egd_tables.py-make-the-script-python-2-3-compat.patch
Patch44: u_intel_anv-make-scripts-python-2-3-compat.patch Patch44: u_intel_anv-make-scripts-python-2-3-compat.patch
Patch47: u_st-dri-don-t-set-queryDmaBufFormats-queryDmaBufModif.patch Patch47: u_st-dri-don-t-set-queryDmaBufFormats-queryDmaBufModif.patch
# Already upstream
Patch100: U_dri3-Stricter-SBC-wraparound-handling.patch
BuildRequires: autoconf >= 2.60 BuildRequires: autoconf >= 2.60
BuildRequires: automake BuildRequires: automake
@ -749,6 +751,7 @@ rm -rf docs/README.{VMS,WIN32,OS2}
%patch43 -p1 %patch43 -p1
%patch44 -p1 %patch44 -p1
%patch47 -p1 %patch47 -p1
%patch100 -p1
# Remove requires to libglvnd/libglvnd-devel from baselibs.conf when # Remove requires to libglvnd/libglvnd-devel from baselibs.conf when
# disabling libglvnd build; ugly ... # disabling libglvnd build; ugly ...

View File

@ -0,0 +1,48 @@
From fe2edb25dd5628c395a65b60998f11e839d2b458 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com>
Date: Tue, 8 May 2018 11:51:09 +0200
Subject: [PATCH] dri3: Stricter SBC wraparound handling
Prevents corrupting the upper 32 bits of draw->recv_sbc when
draw->send_sbc resets to 0 (which currently happens when the window is
unbound from a context and bound to one again), which in turn caused
loader_dri3_swap_buffers_msc to calculate target_msc with corrupted
upper 32 bits. This resulted in hangs with the Xorg modesetting driver
as of xserver 1.20 (older versions and other drivers ignored the upper
32 bits of the target MSC, which is why this wasn't noticed earlier).
Cc: mesa-stable@lists.freedesktop.org
Bugzilla: https://bugs.freedesktop.org/106351
Tested-by: Mike Lothian <mike@fireburn.co.uk>
---
src/loader/loader_dri3_helper.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c
index 6db8303d26..f0ff2f07bd 100644
--- a/src/loader/loader_dri3_helper.c
+++ b/src/loader/loader_dri3_helper.c
@@ -370,9 +370,17 @@ dri3_handle_present_event(struct loader_dri3_drawable *draw,
* checking for wrap.
*/
if (ce->kind == XCB_PRESENT_COMPLETE_KIND_PIXMAP) {
- draw->recv_sbc = (draw->send_sbc & 0xffffffff00000000LL) | ce->serial;
- if (draw->recv_sbc > draw->send_sbc)
- draw->recv_sbc -= 0x100000000;
+ uint64_t recv_sbc = (draw->send_sbc & 0xffffffff00000000LL) | ce->serial;
+
+ /* Only assume wraparound if that results in exactly the previous
+ * SBC + 1, otherwise ignore received SBC > sent SBC (those are
+ * probably from a previous loader_dri3_drawable instance) to avoid
+ * calculating bogus target MSC values in loader_dri3_swap_buffers_msc
+ */
+ if (recv_sbc <= draw->send_sbc)
+ draw->recv_sbc = recv_sbc;
+ else if (recv_sbc == (draw->recv_sbc + 0x100000001ULL))
+ draw->recv_sbc = recv_sbc - 0x100000000ULL;
/* When moving from flip to copy, we assume that we can allocate in
* a more optimal way if we don't need to cater for the display
--
2.16.3