diff options
author | Yurii Kolesnykov | 2018-09-09 13:23:07 +0300 |
---|---|---|
committer | Yurii Kolesnykov | 2018-09-09 13:23:07 +0300 |
commit | 8bab4c2649ce10901869c56efb5e88d6fe5bb8f0 (patch) | |
tree | c4ebfbed59a04c7c072a5ba0c9113271897604f4 | |
parent | db96b1ce6a0375e9edfb8e0bdce017e8f3105143 (diff) | |
download | aur-8bab4c2649ce10901869c56efb5e88d6fe5bb8f0.tar.gz |
2.99.917+847+g25c9a2fc
-rw-r--r-- | .SRCINFO | 6 | ||||
-rw-r--r-- | 0001-SNA-fix-PRIME-output-support-since-xserver-1.20.patch | 93 | ||||
-rw-r--r-- | PKGBUILD | 14 |
3 files changed, 107 insertions, 6 deletions
@@ -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 + @@ -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 } |