summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorYurii Kolesnykov2018-09-09 13:23:07 +0300
committerYurii Kolesnykov2018-09-09 13:23:07 +0300
commit8bab4c2649ce10901869c56efb5e88d6fe5bb8f0 (patch)
treec4ebfbed59a04c7c072a5ba0c9113271897604f4
parentdb96b1ce6a0375e9edfb8e0bdce017e8f3105143 (diff)
downloadaur-8bab4c2649ce10901869c56efb5e88d6fe5bb8f0.tar.gz
2.99.917+847+g25c9a2fc
-rw-r--r--.SRCINFO6
-rw-r--r--0001-SNA-fix-PRIME-output-support-since-xserver-1.20.patch93
-rw-r--r--PKGBUILD14
3 files changed, 107 insertions, 6 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 3359bd4e4686..037b105e215a 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = xf86-video-intel-git
pkgdesc = X.org Intel i810/i830/i915/945G/G965+ video drivers
- pkgver = 2.99.917+842+g3d395062
+ pkgver = 2.99.917+847+g25c9a2fc
pkgrel = 1
epoch = 1
url = https://01.org/linuxgraphics
@@ -42,8 +42,10 @@ pkgbase = xf86-video-intel-git
replaces = xf86-video-intel-uxa
replaces = xf86-video-intel-sna
replaces = xf86-video-intel
- source = xf86-video-intel-git::git://anongit.freedesktop.org/xorg/driver/xf86-video-intel#branch=master
+ source = xf86-video-intel-git::git+https://gitlab.freedesktop.org/xorg/driver/xf86-video-intel.git#branch=master
+ source = 0001-SNA-fix-PRIME-output-support-since-xserver-1.20.patch
sha256sums = SKIP
+ sha256sums = 7cdc310953379ede9693a387ecac6c803cc4c4461df5ad9ab875b35e90a552f5
pkgname = xf86-video-intel-git
diff --git a/0001-SNA-fix-PRIME-output-support-since-xserver-1.20.patch b/0001-SNA-fix-PRIME-output-support-since-xserver-1.20.patch
new file mode 100644
index 000000000000..ca794780babd
--- /dev/null
+++ b/0001-SNA-fix-PRIME-output-support-since-xserver-1.20.patch
@@ -0,0 +1,93 @@
+From e85424325911626556fbe5a313c698a5da701163 Mon Sep 17 00:00:00 2001
+From: Peter Wu <peter@lekensteyn.nl>
+Date: Mon, 13 Aug 2018 22:59:50 +0200
+Subject: [PATCH xf86-video-intel] SNA: fix PRIME output support since xserver
+ 1.20
+
+Since xorg-server 1.20, an external monitor would remain blank when used
+in a PRIME output slave setup. Only a cursor was visible. The cause is
+"Make PixmapDirtyUpdateRec::src a DrawablePtr" in xserver, the "src"
+pointer might point to the root window (created by the server) instead
+of a pixmap (as created by xf86-video-intel). Use get_drawable_pixmap to
+handle both cases.
+
+When built with -fsanitize=address, the following test will trigger a
+heap-buffer-overflow error due to to_sna_from_pixmap receiving a window
+instead of a pixmap.
+
+Test on a hybrid graphics laptop (Intel + modesetting/nouveau):
+
+ xrandr --setprovideroutputsource modesetting Intel
+ xrandr --output DP-1-1 --mode 2560x1440 # should not crash
+ glxgears # should display gears on both screens
+
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100086
+Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+---
+Tested with xserver 1.20.1 with ASAN enabled. Survives multiple
+resolution changes, works with a Plasma desktop session, it seems
+stable. Something like this patch is required to make multi-monitor
+setups usable in a hybrid graphics setting with Xorg 1.20.
+---
+ src/sna/sna_accel.c | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
+index 2f669bcf..80b116a3 100644
+--- a/src/sna/sna_accel.c
++++ b/src/sna/sna_accel.c
+@@ -17510,7 +17510,11 @@ static bool has_offload_slaves(struct sna *sna)
+ PixmapDirtyUpdatePtr dirty;
+
+ xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list, ent) {
++#ifdef HAS_DIRTYTRACKING_DRAWABLE_SRC
++ assert(dirty->src == &sna->front->drawable);
++#else
+ assert(dirty->src == sna->front);
++#endif
+ if (RegionNotEmpty(DamageRegion(dirty->damage)))
+ return true;
+ }
+@@ -17671,7 +17675,11 @@ static void sna_accel_post_damage(struct sna *sna)
+ if (RegionNil(damage))
+ continue;
+
++#ifdef HAS_DIRTYTRACKING_DRAWABLE_SRC
++ src = get_drawable_pixmap(dirty->src);
++#else
+ src = dirty->src;
++#endif
+ dst = dirty->slave_dst->master_pixmap;
+
+ region.extents.x1 = dirty->x;
+@@ -17922,9 +17930,15 @@ migrate_dirty_tracking(PixmapPtr old_front, PixmapPtr new_front)
+ PixmapDirtyUpdatePtr dirty, safe;
+
+ xorg_list_for_each_entry_safe(dirty, safe, &screen->pixmap_dirty_list, ent) {
++#ifdef HAS_DIRTYTRACKING_DRAWABLE_SRC
++ assert(dirty->src == &old_front->drawable);
++ if (dirty->src != &old_front->drawable)
++ continue;
++#else
+ assert(dirty->src == old_front);
+ if (dirty->src != old_front)
+ continue;
++#endif
+
+ DamageUnregister(&dirty->src->drawable, dirty->damage);
+ DamageDestroy(dirty->damage);
+@@ -17939,7 +17953,11 @@ migrate_dirty_tracking(PixmapPtr old_front, PixmapPtr new_front)
+ }
+
+ DamageRegister(&new_front->drawable, dirty->damage);
++#ifdef HAS_DIRTYTRACKING_DRAWABLE_SRC
++ dirty->src = &new_front->drawable;
++#else
+ dirty->src = new_front;
++#endif
+ }
+ #endif
+ }
+--
+2.18.0
+
diff --git a/PKGBUILD b/PKGBUILD
index 1373ff90fb2e..eda5d10971d5 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -5,7 +5,7 @@
pkgname=xf86-video-intel-git
_pkgname=xf86-video-intel
_branch=master
-pkgver=2.99.917+842+g3d395062
+pkgver=2.99.917+847+g25c9a2fc
pkgrel=1
epoch=1
arch=(x86_64)
@@ -32,8 +32,10 @@ conflicts=('xorg-server<1.20' 'X-ABI-VIDEODRV_VERSION<24' 'X-ABI-VIDEODRV_VERSIO
'xf86-video-intel-sna' 'xf86-video-intel-uxa' 'xf86-video-i810' 'xf86-video-intel-legacy'
"${_pkgname}")
groups=('xorg-drivers')
-source=("$pkgname::git://anongit.freedesktop.org/xorg/driver/${_pkgname}#branch=${_branch}")
-sha256sums=('SKIP')
+source=("$pkgname::git+https://gitlab.freedesktop.org/xorg/driver/${_pkgname}.git#branch=${_branch}"
+ 0001-SNA-fix-PRIME-output-support-since-xserver-1.20.patch)
+sha256sums=('SKIP'
+ '7cdc310953379ede9693a387ecac6c803cc4c4461df5ad9ab875b35e90a552f5')
pkgver() {
cd $pkgname
@@ -42,8 +44,12 @@ pkgver() {
prepare() {
cd $pkgname
- NOCONFIGURE=1 ./autogen.sh
+ # fix external monitor - FS#58895
+ # https://bugs.freedesktop.org/show_bug.cgi?id=100086
+ patch -Np1 -i ../0001-SNA-fix-PRIME-output-support-since-xserver-1.20.patch
+
+ NOCONFIGURE=1 ./autogen.sh
# mkdir build
}