diff --git a/Mesa-drivers.changes b/Mesa-drivers.changes index fd3043e..d65f378 100644 --- a/Mesa-drivers.changes +++ b/Mesa-drivers.changes @@ -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 diff --git a/Mesa-drivers.spec b/Mesa-drivers.spec index b40f167..53c67fe 100644 --- a/Mesa-drivers.spec +++ b/Mesa-drivers.spec @@ -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 Patch44: u_intel_anv-make-scripts-python-2-3-compat.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: automake @@ -750,6 +752,7 @@ rm -rf docs/README.{VMS,WIN32,OS2} %patch43 -p1 %patch44 -p1 %patch47 -p1 +%patch100 -p1 # Remove requires to libglvnd/libglvnd-devel from baselibs.conf when # disabling libglvnd build; ugly ... diff --git a/Mesa.changes b/Mesa.changes index fd3043e..d65f378 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -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 diff --git a/Mesa.spec b/Mesa.spec index 3b98b6e..c5df18c 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -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 Patch44: u_intel_anv-make-scripts-python-2-3-compat.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: automake @@ -749,6 +751,7 @@ rm -rf docs/README.{VMS,WIN32,OS2} %patch43 -p1 %patch44 -p1 %patch47 -p1 +%patch100 -p1 # Remove requires to libglvnd/libglvnd-devel from baselibs.conf when # disabling libglvnd build; ugly ... diff --git a/U_dri3-Stricter-SBC-wraparound-handling.patch b/U_dri3-Stricter-SBC-wraparound-handling.patch new file mode 100644 index 0000000..310baa9 --- /dev/null +++ b/U_dri3-Stricter-SBC-wraparound-handling.patch @@ -0,0 +1,48 @@ +From fe2edb25dd5628c395a65b60998f11e839d2b458 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michel=20D=C3=A4nzer?= +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 +--- + 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 +