diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/0001-Update-README.source-for-salsa.patch xserver-xorg-video-intel-2.99.917+git20210115/0001-Update-README.source-for-salsa.patch --- xserver-xorg-video-intel-2.99.917+git20200714/0001-Update-README.source-for-salsa.patch 1970-01-01 00:00:00.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/0001-Update-README.source-for-salsa.patch 2022-04-01 16:54:23.000000000 +0000 @@ -0,0 +1,43 @@ +From 2d96b7ebd44a3efc69f65694dab50c284e478c5b Mon Sep 17 00:00:00 2001 +From: Timo Aaltonen +Date: Wed, 9 Feb 2022 12:48:54 +0200 +Subject: [PATCH] Update README.source for salsa. + +--- + debian/README.source | 4 ++-- + debian/changelog | 6 ++++++ + 2 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/debian/README.source b/debian/README.source +index f9bb7c69..8fb2245e 100644 +--- a/debian/README.source ++++ b/debian/README.source +@@ -25,9 +25,9 @@ Guide To The X Strike Force Packages + ------------------------------------ + + The X Strike Force team maintains X packages in git repositories on +-git.debian.org in the pkg-xorg subdirectory. Most upstream packages ++salsa.debian.org in the xorg-team subdirectory. Most upstream packages + are actually maintained in git repositories as well, so they often +-just need to be pulled into git.debian.org in a "upstream-*" branch. ++just need to be pulled into salsa.debian.org in a "upstream-*" branch. + Otherwise, the upstream sources are manually installed in the Debian + git repository. + +diff --git a/debian/changelog b/debian/changelog +index f99db879..8a44151b 100644 +--- a/debian/changelog ++++ b/debian/changelog +@@ -1,3 +1,9 @@ ++xserver-xorg-video-intel (2:2.99.917+git20210115-2) UNRELEASED; urgency=medium ++ ++ * Update README.source for salsa. ++ ++ -- Timo Aaltonen Wed, 09 Feb 2022 12:48:51 +0200 ++ + xserver-xorg-video-intel (2:2.99.917+git20210115-1) unstable; urgency=medium + + * New upstream snapshot. +-- +2.34.1 + diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/debian/changelog xserver-xorg-video-intel-2.99.917+git20210115/debian/changelog --- xserver-xorg-video-intel-2.99.917+git20200714/debian/changelog 2022-04-01 16:54:22.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/debian/changelog 2022-04-01 16:54:23.000000000 +0000 @@ -1,14 +1,23 @@ -xserver-xorg-video-intel (2:2.99.917+git20200714-1ubuntu2) impish; urgency=medium +xserver-xorg-video-intel (2:2.99.917+git20210115-1) unstable; urgency=medium - * No-change rebuild to build packages with zstd compression. + * New upstream snapshot. + * Build against xserver 21.1. + * rules: Disable building with lto. + * control: Bump debhelper-compat to 13, policy to 4.6.0. + * Update README.source for salsa. + * watch: Update upstream git url. - -- Matthias Klose Thu, 07 Oct 2021 12:27:12 +0200 + -- Timo Aaltonen Wed, 09 Feb 2022 12:51:46 +0200 -xserver-xorg-video-intel (2:2.99.917+git20200714-1ubuntu1) hirsute; urgency=medium +xserver-xorg-video-intel (2:2.99.917+git20200714-2) unstable; urgency=medium - * Disable building with lto, it's a 20+GB link not yet investigated. + [ Timo Aaltonen ] + * control: Fix typos in description. (LP: #1653828) - -- Matthias Klose Fri, 26 Mar 2021 13:41:16 +0100 + [ Julien Cristau ] + * Fix SIGILL crash on non-SSE2 CPUs (closes: #979276) + + -- Julien Cristau Wed, 26 Jan 2022 17:40:32 +0100 xserver-xorg-video-intel (2:2.99.917+git20200714-1) unstable; urgency=medium diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/debian/control xserver-xorg-video-intel-2.99.917+git20210115/debian/control --- xserver-xorg-video-intel-2.99.917+git20200714/debian/control 2022-04-01 16:54:22.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/debian/control 2022-04-01 16:54:23.000000000 +0000 @@ -8,9 +8,9 @@ maximilian attems , Vincent Cheng , Build-Depends: - debhelper-compat (= 12), + debhelper-compat (= 13), pkg-config, - xserver-xorg-dev (>= 2:1.11.99.901), + xserver-xorg-dev (>= 2:21.1), x11proto-dev, libx11-dev, libdrm-dev (>= 2.4.23), @@ -42,7 +42,7 @@ # tests, benchmarks: # libcairo2-dev, # libpng12-dev, -Standards-Version: 4.5.0 +Standards-Version: 4.6.0 Vcs-Git: https://salsa.debian.org/xorg-team/driver/xserver-xorg-video-intel.git Vcs-Browser: https://salsa.debian.org/xorg-team/driver/xserver-xorg-video-intel Homepage: https://www.x.org/ @@ -65,6 +65,6 @@ . This package is built from the X.org xf86-video-intel driver module. . - The use of this driver is discouraged if your hw is new enough (ca. + The use of this driver is discouraged if your GPU is new enough (ca. 2007 and newer). You can try uninstalling this driver and let the - server use its builtin modesetting driver instead. + server use its built-in modesetting driver instead. diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/debian/patches/series xserver-xorg-video-intel-2.99.917+git20210115/debian/patches/series --- xserver-xorg-video-intel-2.99.917+git20200714/debian/patches/series 2022-04-01 16:54:22.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/debian/patches/series 2022-04-01 16:54:23.000000000 +0000 @@ -1 +1 @@ -#placeholder +sna-sse2.diff diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/debian/patches/sna-sse2.diff xserver-xorg-video-intel-2.99.917+git20210115/debian/patches/sna-sse2.diff --- xserver-xorg-video-intel-2.99.917+git20200714/debian/patches/sna-sse2.diff 1970-01-01 00:00:00.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/debian/patches/sna-sse2.diff 2022-04-01 16:54:23.000000000 +0000 @@ -0,0 +1,22 @@ +From 3d9f93d8bc5dfe2b79d4e16b8b5a6ce13b0792af Mon Sep 17 00:00:00 2001 +From: Julien Cristau +Date: Fri, 21 Jan 2022 13:50:12 +0100 +Subject: [PATCH xf86-video-intel] Fix SIGILL crash on non-SSE2 CPUs (closes: + #979276) + +diff --git a/src/sna/blt.c b/src/sna/blt.c +index afc719f6..803c5142 100644 +--- a/src/sna/blt.c ++++ b/src/sna/blt.c +@@ -631,7 +631,7 @@ memcpy_between_tiled_x__swizzle_0__sse2(const void *src, void *dst, int bpp, + } + } + +-#pragma GCC push_options ++#pragma GCC pop_options + #endif + + fast void +-- +2.30.2 + diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/debian/README.source xserver-xorg-video-intel-2.99.917+git20210115/debian/README.source --- xserver-xorg-video-intel-2.99.917+git20200714/debian/README.source 2022-04-01 16:54:22.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/debian/README.source 2022-04-01 16:54:23.000000000 +0000 @@ -25,9 +25,9 @@ ------------------------------------ The X Strike Force team maintains X packages in git repositories on -git.debian.org in the pkg-xorg subdirectory. Most upstream packages +salsa.debian.org in the xorg-team subdirectory. Most upstream packages are actually maintained in git repositories as well, so they often -just need to be pulled into git.debian.org in a "upstream-*" branch. +just need to be pulled into salsa.debian.org in a "upstream-*" branch. Otherwise, the upstream sources are manually installed in the Debian git repository. diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/debian/rules xserver-xorg-video-intel-2.99.917+git20210115/debian/rules --- xserver-xorg-video-intel-2.99.917+git20200714/debian/rules 2022-04-01 16:54:22.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/debian/rules 2022-04-01 16:54:23.000000000 +0000 @@ -4,10 +4,10 @@ SOURCE_VERSION := $(shell dpkg-parsechangelog | awk -F': ' '/^Version: / {print $$2}') BUILDER := $(shell dpkg-parsechangelog | awk -F': ' '/^Maintainer: / {print $$2}') -export DEB_BUILD_MAINT_OPTIONS = optimize=-lto - DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS) +export DEB_BUILD_MAINT_OPTIONS = optimize=-lto + ifeq ($(DEB_HOST_ARCH_OS), linux) valgrind = --enable-valgrind else diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/debian/watch xserver-xorg-video-intel-2.99.917+git20210115/debian/watch --- xserver-xorg-video-intel-2.99.917+git20200714/debian/watch 2022-04-01 16:54:22.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/debian/watch 2022-04-01 16:54:23.000000000 +0000 @@ -1,3 +1,3 @@ -#git=git://anongit.freedesktop.org/xorg/driver/xf86-video-intel +#git=https://gitlab.freedesktop.org/xorg/driver/xf86-video-intel version=3 https://xorg.freedesktop.org/releases/individual/driver/ xf86-video-intel-(.*)\.tar\.gz diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/src/compat-api.h xserver-xorg-video-intel-2.99.917+git20210115/src/compat-api.h --- xserver-xorg-video-intel-2.99.917+git20200714/src/compat-api.h 2020-05-15 16:56:58.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/src/compat-api.h 2021-01-15 20:59:05.000000000 +0000 @@ -260,4 +260,12 @@ #define RemoveNotifyFd(fd) RemoveGeneralSocket(fd) #endif +#if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(25, 2) +#define PixmapDirtyDst(d) ((d)->secondary_dst) +#define PixmapDirtyPrimary(d) (PixmapDirtyDst(d)->primary_pixmap) +#else +#define PixmapDirtyDst(d) ((d)->slave_dst) +#define PixmapDirtyPrimary(d) (PixmapDirtyDst(d)->master_pixmap) +#endif + #endif diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/src/sna/gen7_render.c xserver-xorg-video-intel-2.99.917+git20210115/src/sna/gen7_render.c --- xserver-xorg-video-intel-2.99.917+git20200714/src/sna/gen7_render.c 2020-05-15 16:56:58.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/src/sna/gen7_render.c 2021-01-15 20:59:05.000000000 +0000 @@ -2957,42 +2957,10 @@ struct kgem_bo *dst_bo, unsigned flags) { - if (sna->kgem.mode == KGEM_BLT) - return true; - - assert((flags & COPY_SYNC) == 0); - - if (untiled_tlb_miss(src_bo) || - untiled_tlb_miss(dst_bo)) - return true; - - if (flags & COPY_DRI && !sna->kgem.has_semaphores) - return false; - - if (force_blt_ring(sna, dst_bo, src_bo)) - return true; - - if ((flags & COPY_SMALL || - (sna->render_state.gt < 3 && src_bo == dst_bo)) && - can_switch_to_blt(sna, dst_bo, flags)) - return true; - - if (kgem_bo_is_render(dst_bo) || - kgem_bo_is_render(src_bo)) - return false; - - if (flags & COPY_LAST && - sna->render_state.gt < 3 && - can_switch_to_blt(sna, dst_bo, flags)) - return true; - - if (prefer_render_ring(sna, dst_bo)) - return false; - - if (!prefer_blt_ring(sna, dst_bo, flags)) + if (sna->kgem.ring != KGEM_BLT) return false; - return prefer_blt_bo(sna, src_bo, dst_bo); + return true; /* avoid clear-residuals context overhead */ } static bool diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/src/sna/kgem.c xserver-xorg-video-intel-2.99.917+git20210115/src/sna/kgem.c --- xserver-xorg-video-intel-2.99.917+git20200714/src/sna/kgem.c 2020-05-15 16:56:58.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/src/sna/kgem.c 2021-01-15 20:59:05.000000000 +0000 @@ -520,7 +520,7 @@ return do_ioctl(fd, LOCAL_IOCTL_I915_GEM_SET_CACHING, &arg) == 0; } -static uint32_t gem_userptr(int fd, void *ptr, int size, int read_only) +static uint32_t gem_userptr(int fd, void *ptr, size_t size, int read_only) { struct local_i915_gem_userptr arg; @@ -1944,6 +1944,19 @@ return aperture.aper_size; } +static int get_gtt_type(int fd) +{ + struct drm_i915_getparam p; + int val = 0; + + memset(&p, 0, sizeof(p)); + p.param = I915_PARAM_HAS_ALIASING_PPGTT; + p.value = &val; + + drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &p); + return val; +} + void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, unsigned gen) { size_t totalram; @@ -2108,6 +2121,8 @@ !DBG_NO_CPU && (kgem->has_llc | kgem->has_userptr | kgem->has_caching), kgem->has_llc, kgem->has_caching, kgem->has_userptr)); + kgem->has_full_ppgtt = get_gtt_type(fd) > 1; + gtt_size = get_gtt_size(fd); kgem->aperture_total = gtt_size; kgem->aperture_high = gtt_size * 3/4; @@ -7016,6 +7031,30 @@ return flink.name; } +static bool probe(struct kgem *kgem, uint32_t handle) +{ + struct drm_i915_gem_set_domain arg = { + .handle = handle, + .read_domains = I915_GEM_DOMAIN_CPU, + }; + + return do_ioctl(kgem->fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &arg) == 0; +} + +static uint32_t probe_userptr(struct kgem *kgem, + void *ptr, size_t size, int read_only) +{ + uint32_t handle; + + handle = gem_userptr(kgem->fd, ptr, size, read_only); + if (handle && !probe(kgem, handle)) { + gem_close(kgem->fd, handle); + handle = 0; + } + + return handle; +} + struct kgem_bo *kgem_create_map(struct kgem *kgem, void *ptr, uint32_t size, bool read_only) @@ -7038,30 +7077,16 @@ last_page &= ~(uintptr_t)(PAGE_SIZE-1); assert(last_page > first_page); - handle = gem_userptr(kgem->fd, - (void *)first_page, last_page-first_page, - read_only); + handle = probe_userptr(kgem, + (void *)first_page, last_page-first_page, + read_only); + if (handle == 0 && read_only && kgem->has_wc_mmap) + handle = probe_userptr(kgem, + (void *)first_page, last_page-first_page, + false); if (handle == 0) { - if (read_only && kgem->has_wc_mmap) { - struct drm_i915_gem_set_domain set_domain; - - handle = gem_userptr(kgem->fd, - (void *)first_page, last_page-first_page, - false); - - VG_CLEAR(set_domain); - set_domain.handle = handle; - set_domain.read_domains = I915_GEM_DOMAIN_GTT; - set_domain.write_domain = 0; - if (do_ioctl(kgem->fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &set_domain)) { - gem_close(kgem->fd, handle); - handle = 0; - } - } - if (handle == 0) { - DBG(("%s: import failed, errno=%d\n", __FUNCTION__, errno)); - return NULL; - } + DBG(("%s: import failed, errno=%d\n", __FUNCTION__, errno)); + return NULL; } bo = __kgem_bo_alloc(handle, (last_page - first_page) / PAGE_SIZE); diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/src/sna/kgem.h xserver-xorg-video-intel-2.99.917+git20210115/src/sna/kgem.h --- xserver-xorg-video-intel-2.99.917+git20200714/src/sna/kgem.h 2020-05-15 16:56:58.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/src/sna/kgem.h 2021-01-15 20:59:05.000000000 +0000 @@ -191,6 +191,7 @@ uint32_t has_pinned_batches :1; uint32_t has_caching :1; uint32_t has_coherent_mmap_gtt :1; + uint32_t has_full_ppgtt :1; uint32_t has_llc :1; uint32_t has_wt :1; uint32_t has_no_reloc :1; diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/src/sna/sna_accel.c xserver-xorg-video-intel-2.99.917+git20210115/src/sna/sna_accel.c --- xserver-xorg-video-intel-2.99.917+git20200714/src/sna/sna_accel.c 2020-05-15 16:56:58.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/src/sna/sna_accel.c 2021-01-15 20:59:05.000000000 +0000 @@ -17696,7 +17696,7 @@ #else src = dirty->src; #endif - dst = dirty->slave_dst->master_pixmap; + dst = PixmapDirtyPrimary(dirty); region.extents.x1 = dirty->x; region.extents.x2 = dirty->x + dst->drawable.width; @@ -17723,7 +17723,7 @@ dy += dirty->dst_y; #endif RegionTranslate(®ion, dx, dy); - DamageRegionAppend(&dirty->slave_dst->drawable, ®ion); + DamageRegionAppend(&PixmapDirtyDst(dirty)->drawable, ®ion); DBG(("%s: slave: ((%d, %d), (%d, %d))x%d\n", __FUNCTION__, region.extents.x1, region.extents.y1, @@ -17800,7 +17800,7 @@ kgem_bo_sync__gtt(&sna->kgem, __sna_pixmap_get_bo(dst)); } - DamageRegionProcessPending(&dirty->slave_dst->drawable); + DamageRegionProcessPending(&PixmapDirtyDst(dirty)->drawable); skip: RegionUninit(®ion); DamageEmpty(dirty->damage); diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/src/sna/sna_composite.c xserver-xorg-video-intel-2.99.917+git20210115/src/sna/sna_composite.c --- xserver-xorg-video-intel-2.99.917+git20200714/src/sna/sna_composite.c 2020-05-15 16:56:58.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/src/sna/sna_composite.c 2021-01-15 20:59:05.000000000 +0000 @@ -649,15 +649,15 @@ CARD16 width, CARD16 height) { PixmapPtr pixmap = get_drawable_pixmap(dst->pDrawable); - struct sna *sna = to_sna_from_pixmap(pixmap); struct sna_pixmap *priv; struct sna_composite_op tmp; RegionRec region; + struct sna *sna; int dx, dy; DBG(("%s(pixmap=%ld, op=%d, src=%ld+(%d, %d), mask=%ld+(%d, %d), dst=%ld+(%d, %d)+(%d, %d), size=(%d, %d)\n", __FUNCTION__, - pixmap->drawable.serialNumber, op, + pixmap ? pixmap->drawable.serialNumber : 0, op, get_picture_id(src), src_x, src_y, get_picture_id(mask), mask_x, mask_y, get_picture_id(dst), dst_x, dst_y, @@ -672,8 +672,7 @@ if (op == PictOpClear) { DBG(("%s: discarding source and mask for clear\n", __FUNCTION__)); mask = NULL; - if (sna->clear) - src = sna->clear; + src = NULL; } if (!sna_compute_composite_region(®ion, @@ -694,11 +693,6 @@ if (NO_COMPOSITE) goto fallback; - if (wedged(sna)) { - DBG(("%s: fallback -- wedged\n", __FUNCTION__)); - goto fallback; - } - if (!can_render_to_picture(dst)) { DBG(("%s: fallback due to unhandled picture\n", __FUNCTION__)); goto fallback; @@ -711,6 +705,15 @@ goto fallback; } + sna = to_sna_from_pixmap(pixmap); + if (wedged(sna)) { + DBG(("%s: fallback -- wedged\n", __FUNCTION__)); + goto fallback; + } + + if (op == PictOpClear) + src = sna->clear; + if (use_cpu(pixmap, priv, op, width, height) && !picture_is_gpu(sna, src, PREFER_GPU_RENDER) && !picture_is_gpu(sna, mask, PREFER_GPU_RENDER)) { diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/src/sna/sna_driver.c xserver-xorg-video-intel-2.99.917+git20210115/src/sna/sna_driver.c --- xserver-xorg-video-intel-2.99.917+git20200714/src/sna/sna_driver.c 2020-05-15 16:56:58.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/src/sna/sna_driver.c 2021-01-15 20:59:05.000000000 +0000 @@ -459,7 +459,18 @@ if (sna->flags & SNA_LINEAR_FB) return false; - /* Under certain conditions, we should enable TearFree by default, + /* + * On recent HW, where the display surfaces are in a seperate GTT + * to userspace, there is much less contention on global resources + * and also we can assume there is much more memory bandwidth + * available (i.e. gen8+). This HW should rarely be under such + * constaints as to need to disable TearFree, so enable by default. + */ + if (sna->kgem.has_full_ppgtt) + return true; + + /* + * Under certain conditions, we should enable TearFree by default, * for example when the hardware requires pageflipping to run within * its power/performance budget. */ diff -Nru xserver-xorg-video-intel-2.99.917+git20200714/src/uxa/intel_driver.c xserver-xorg-video-intel-2.99.917+git20210115/src/uxa/intel_driver.c --- xserver-xorg-video-intel-2.99.917+git20200714/src/uxa/intel_driver.c 2020-05-15 16:56:58.000000000 +0000 +++ xserver-xorg-video-intel-2.99.917+git20210115/src/uxa/intel_driver.c 2021-01-15 20:59:05.000000000 +0000 @@ -624,30 +624,30 @@ RegionRec pixregion; int was_blocked; - PixmapRegionInit(&pixregion, dirty->slave_dst->master_pixmap); + PixmapRegionInit(&pixregion, PixmapDirtyPrimary(dirty)); RegionTranslate(&pixregion, dirty->x, dirty->y); RegionIntersect(&pixregion, &pixregion, DamageRegion(dirty->damage)); RegionTranslate(&pixregion, -dirty->x, -dirty->y); was_blocked = RegionNil(&pixregion); - DamageRegionAppend(&dirty->slave_dst->drawable, &pixregion); + DamageRegionAppend(&PixmapDirtyDst(dirty)->drawable, &pixregion); RegionUninit(&pixregion); if (was_blocked) return; - PixmapRegionInit(&pixregion, dirty->slave_dst->master_pixmap); + PixmapRegionInit(&pixregion, PixmapDirtyPrimary(dirty)); PixmapSyncDirtyHelper(dirty, &pixregion); RegionUninit(&pixregion); intel_flush(intel); if (!intel->has_prime_vmap_flush) { - drm_intel_bo *bo = intel_uxa_get_pixmap_bo(dirty->slave_dst->master_pixmap); + drm_intel_bo *bo = intel_uxa_get_pixmap_bo(PixmapDirtyPrimary(dirty)); was_blocked = xf86BlockSIGIO(); drm_intel_bo_map(bo, FALSE); drm_intel_bo_unmap(bo); xf86UnblockSIGIO(was_blocked); } - DamageRegionProcessPending(&dirty->slave_dst->drawable); + DamageRegionProcessPending(&PixmapDirtyDst(dirty)->drawable); return; }