summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO40
-rw-r--r--0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch4
-rw-r--r--0002-iwlwifi-pcie-restore-support-for-Killer-Qu-C0-NICs.patch4
-rw-r--r--0003-iwlwifi-mvm-Do-not-require-PHY_SKU-NVM-section-for-3.patch6
-rw-r--r--0004-drm-i915-Wean-off-drm_pci_alloc-drm_pci_free.patch4
-rw-r--r--0005-drm-Remove-PageReserved-manipulation-from-drm_pci_al.patch5
-rw-r--r--0006-drm-i915-execlists-Always-force-a-context-reload-whe.patch4
-rw-r--r--0007-drm-i915-Serialise-i915_active_acquire-with-__active.patch79
-rw-r--r--0008-drm-i915-gem-Take-runtime-pm-wakeref-prior-to-unbind.patch130
-rw-r--r--0009-drm-i915-gem-Avoid-parking-the-vma-as-we-unbind.patch63
-rw-r--r--0010-drm-i915-gem-Try-to-flush-pending-unbind-events.patch64
-rw-r--r--0011-drm-i915-gem-Reinitialise-the-local-list-before-repe.patch34
-rw-r--r--0012-drm-i915-Add-a-simple-is-bound-check-before-unbindin.patch41
-rw-r--r--0013-drm-i915-Introduce-a-vma.kref.patch252
-rw-r--r--PKGBUILD30
15 files changed, 726 insertions, 34 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 0ed0db238c5f..1e86cf9d9291 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,5 +1,5 @@
pkgbase = linux-ck
- pkgver = 5.5.3
+ pkgver = 5.5.4
pkgrel = 1
url = https://wiki.archlinux.org/index.php/Linux-ck
arch = x86_64
@@ -8,8 +8,8 @@ pkgbase = linux-ck
makedepends = kmod
makedepends = libelf
options = !strip
- source = https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.5.3.tar.xz
- source = https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.5.3.tar.sign
+ source = https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.5.4.tar.xz
+ source = https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.5.4.tar.sign
source = config
source = enable_additional_cpu_optimizations-20191217.tar.gz::https://github.com/graysky2/kernel_gcc_patch/archive/20191217.tar.gz
source = http://ck.kolivas.org/patches/5.0/5.5/5.5-ck1/patch-5.5-ck1.xz
@@ -19,19 +19,33 @@ pkgbase = linux-ck
source = 0004-drm-i915-Wean-off-drm_pci_alloc-drm_pci_free.patch
source = 0005-drm-Remove-PageReserved-manipulation-from-drm_pci_al.patch
source = 0006-drm-i915-execlists-Always-force-a-context-reload-whe.patch
+ source = 0007-drm-i915-Serialise-i915_active_acquire-with-__active.patch
+ source = 0008-drm-i915-gem-Take-runtime-pm-wakeref-prior-to-unbind.patch
+ source = 0009-drm-i915-gem-Avoid-parking-the-vma-as-we-unbind.patch
+ source = 0010-drm-i915-gem-Try-to-flush-pending-unbind-events.patch
+ source = 0011-drm-i915-gem-Reinitialise-the-local-list-before-repe.patch
+ source = 0012-drm-i915-Add-a-simple-is-bound-check-before-unbindin.patch
+ source = 0013-drm-i915-Introduce-a-vma.kref.patch
validpgpkeys = ABAF11C65A2970B130ABE3C479BE3E4300411886
validpgpkeys = 647F28654894E3BD457199BE38DBBDC86092693E
- sha256sums = 2bef3edcf44c746383045f4a809b2013e18c52319c827875ed8e89138951cab2
+ sha256sums = ea40fd0deb0ba043c628ad4039c67ca9e4d8adc88d67d8b8c5a20f264403a6fb
sha256sums = SKIP
sha256sums = eb95e2f45dc868b097136d75077b8861b85fea109de78bff253fbf98162e5cb6
sha256sums = 7a4a209de815f4bae49c7c577c0584c77257e3953ac4324d2aa425859ba657f5
sha256sums = 37a9d61e8a0b5a73992e1397c3a9cc947d39e715f205f3c665eb157b96d58f98
- sha256sums = c981eacffe1091fbd4b22fd6359163bea343591c44c7c53573391541eb943d17
- sha256sums = a25a82ce5a7e84d7a580036a250aa4d2621ab0fdac0f375b40417a207f87cf87
- sha256sums = d5b209bcd90d11fd83055ffe8aea617776101502908c4aefdc7f6f3bc3a87929
- sha256sums = 03bcdd2668403cf7875bab86313cb4719dc35e202f4bb21c61c3646215a15be3
- sha256sums = 49a63d402a35dcefe18e858b0c66d0983a075c003fcfb50426fd0ba79639fafe
- sha256sums = 8e1e9cf077e774ac579bbaa7cb5932a1f96f50fad7a72fa998b868137c2472d3
+ sha256sums = 2be34867fcb55a5ab7ee0f25b3fbe4da1b4c55fd118053c9510a9b1e87ed0960
+ sha256sums = 39e2bd569c5efe83c2facddd9e0b846a6c35937b1280a9ddead5c150fa8ca10d
+ sha256sums = 07d60156eb70be84adc1376a3d7434811f1373282c0b5198c4cd580c8bfcaa7e
+ sha256sums = 853403b019a9495c72df52cabe85653590b9a4021343c09e2438c25b96aae163
+ sha256sums = 8385a3771e4d747a8c6d06bb9a3dd73870fc378ded8d0d0f2b1388b89813719b
+ sha256sums = 9556c74b7744ad863da61384d2b2b9e996be4652dd4d93d3fcab7f256b224f06
+ sha256sums = fe4a15e4e85e0a1ab2e6e3ab790ba53eb5cf538b9a16b6e2327cb3c89f66fc75
+ sha256sums = f0177eb3395c910064a9bbd7ae5849f0e6e0094227d2b01367978ca6553fc10c
+ sha256sums = 51d6e34f69be927600edb3fddbd0dda75773fb28818bcc35f540cf14501e1ef6
+ sha256sums = b74618c46e3d2f17d851ccf36d57142a2187787f0e1f529e72898b1d267ab422
+ sha256sums = 586b7a558b47c443ccccbb6267ffe3fef59d14004b9d5c4591daca4999766fe9
+ sha256sums = 466cd85077249c54168dba181378d590009f0bb7215a119d1bed6ebbdfe35cd5
+ sha256sums = 127e6d1ead0c2ba5414038a7a3680e2303a230e88c55d2b6cbf35495dbe345e3
pkgname = linux-ck
pkgdesc = The Linux-ck kernel and modules with the ck1 patchset featuring MuQSS CPU scheduler
@@ -40,11 +54,11 @@ pkgname = linux-ck
depends = initramfs
optdepends = crda: to set the correct wireless channels of your country
optdepends = linux-firmware: firmware images needed for some devices
- provides = linux-ck=5.5.3
+ provides = linux-ck=5.5.4
pkgname = linux-ck-headers
pkgdesc = Headers and scripts for building modules for Linux-ck kernel
depends = linux-ck
- provides = linux-ck-headers=5.5.3
- provides = linux-headers=5.5.3
+ provides = linux-ck-headers=5.5.4
+ provides = linux-headers=5.5.4
diff --git a/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch b/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
index 4f44a57c52b4..ceb2fae2d253 100644
--- a/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
+++ b/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
@@ -1,7 +1,7 @@
-From 0bbf7dded241dc90f2f63ed89ea8884f3c2dd37f Mon Sep 17 00:00:00 2001
+From 440f5aa9cc713a5ad3eb5eb2c121b0e03b9f5032 Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Mon, 16 Sep 2019 04:53:20 +0200
-Subject: [PATCH 1/7] ZEN: Add sysctl and CONFIG to disallow unprivileged
+Subject: [PATCH 01/14] ZEN: Add sysctl and CONFIG to disallow unprivileged
CLONE_NEWUSER
Our default behavior continues to match the vanilla kernel.
diff --git a/0002-iwlwifi-pcie-restore-support-for-Killer-Qu-C0-NICs.patch b/0002-iwlwifi-pcie-restore-support-for-Killer-Qu-C0-NICs.patch
index bd4b2bece81f..16ef07a656fa 100644
--- a/0002-iwlwifi-pcie-restore-support-for-Killer-Qu-C0-NICs.patch
+++ b/0002-iwlwifi-pcie-restore-support-for-Killer-Qu-C0-NICs.patch
@@ -1,7 +1,7 @@
-From 62285c8ffeb4318bad4686ab794f43a82164514b Mon Sep 17 00:00:00 2001
+From ccd811432798cc548d3796fde7caade188d23bd8 Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Tue, 24 Dec 2019 06:16:39 +0100
-Subject: [PATCH 2/7] iwlwifi: pcie: restore support for Killer Qu C0 NICs
+Subject: [PATCH 02/14] iwlwifi: pcie: restore support for Killer Qu C0 NICs
Commit 809805a820c6 ("iwlwifi: pcie: move some cfg mangling from
trans_pcie_alloc to probe") refactored the cfg mangling. Unfortunately,
diff --git a/0003-iwlwifi-mvm-Do-not-require-PHY_SKU-NVM-section-for-3.patch b/0003-iwlwifi-mvm-Do-not-require-PHY_SKU-NVM-section-for-3.patch
index bd1492b3484a..e82b851b7e99 100644
--- a/0003-iwlwifi-mvm-Do-not-require-PHY_SKU-NVM-section-for-3.patch
+++ b/0003-iwlwifi-mvm-Do-not-require-PHY_SKU-NVM-section-for-3.patch
@@ -1,8 +1,8 @@
-From 0e6fb279c7fc6fc818942f668f731946286c959c Mon Sep 17 00:00:00 2001
+From b0dbc3d2f076fa5acee310b34534b44f15ae4836 Mon Sep 17 00:00:00 2001
From: Dan Moulding <dmoulding@me.com>
Date: Tue, 28 Jan 2020 02:31:07 -0700
-Subject: [PATCH 3/7] iwlwifi: mvm: Do not require PHY_SKU NVM section for 3168
- devices
+Subject: [PATCH 03/14] iwlwifi: mvm: Do not require PHY_SKU NVM section for
+ 3168 devices
The logic for checking required NVM sections was recently fixed in
commit b3f20e098293 ("iwlwifi: mvm: fix NVM check for 3168
diff --git a/0004-drm-i915-Wean-off-drm_pci_alloc-drm_pci_free.patch b/0004-drm-i915-Wean-off-drm_pci_alloc-drm_pci_free.patch
index 8be0a16bcd17..1a6d4da6fc02 100644
--- a/0004-drm-i915-Wean-off-drm_pci_alloc-drm_pci_free.patch
+++ b/0004-drm-i915-Wean-off-drm_pci_alloc-drm_pci_free.patch
@@ -1,7 +1,7 @@
-From 7af5e53f87d728579cba99568717a6af3625184b Mon Sep 17 00:00:00 2001
+From 1533cd73061e99ed6dd58cba03da2b762a616a95 Mon Sep 17 00:00:00 2001
From: Chris Wilson <chris@chris-wilson.co.uk>
Date: Sun, 2 Feb 2020 15:39:34 +0000
-Subject: [PATCH 4/7] drm/i915: Wean off drm_pci_alloc/drm_pci_free
+Subject: [PATCH 04/14] drm/i915: Wean off drm_pci_alloc/drm_pci_free
drm_pci_alloc and drm_pci_free are just very thin wrappers around
dma_alloc_coherent, with a note that we should be removing them.
diff --git a/0005-drm-Remove-PageReserved-manipulation-from-drm_pci_al.patch b/0005-drm-Remove-PageReserved-manipulation-from-drm_pci_al.patch
index bbe4432aaaf8..354957c28ccc 100644
--- a/0005-drm-Remove-PageReserved-manipulation-from-drm_pci_al.patch
+++ b/0005-drm-Remove-PageReserved-manipulation-from-drm_pci_al.patch
@@ -1,7 +1,8 @@
-From c40f78c76b2f3ae55c348e8b206b0b283f01549c Mon Sep 17 00:00:00 2001
+From 4dfbfe187c731b4f33e1a66e70ca10854e469527 Mon Sep 17 00:00:00 2001
From: Chris Wilson <chris@chris-wilson.co.uk>
Date: Sun, 2 Feb 2020 17:16:31 +0000
-Subject: [PATCH 5/7] drm: Remove PageReserved manipulation from drm_pci_alloc
+Subject: [PATCH 05/14] drm: Remove PageReserved manipulation from
+ drm_pci_alloc
drm_pci_alloc/drm_pci_free are very thin wrappers around the core dma
facilities, and we have no special reason within the drm layer to behave
diff --git a/0006-drm-i915-execlists-Always-force-a-context-reload-whe.patch b/0006-drm-i915-execlists-Always-force-a-context-reload-whe.patch
index 8f7938320cd1..93ac94bd6721 100644
--- a/0006-drm-i915-execlists-Always-force-a-context-reload-whe.patch
+++ b/0006-drm-i915-execlists-Always-force-a-context-reload-whe.patch
@@ -1,7 +1,7 @@
-From 6ffd5925e2659e589d48b8dcaf06e0b3cc0f4d52 Mon Sep 17 00:00:00 2001
+From 4e64b7d1a9e63f7b9c1cecc8995e6fc1fed42e77 Mon Sep 17 00:00:00 2001
From: Chris Wilson <chris@chris-wilson.co.uk>
Date: Fri, 7 Feb 2020 21:14:52 +0000
-Subject: [PATCH 6/7] drm/i915/execlists: Always force a context reload when
+Subject: [PATCH 06/14] drm/i915/execlists: Always force a context reload when
rewinding RING_TAIL
If we rewind the RING_TAIL on a context, due to a preemption event, we
diff --git a/0007-drm-i915-Serialise-i915_active_acquire-with-__active.patch b/0007-drm-i915-Serialise-i915_active_acquire-with-__active.patch
new file mode 100644
index 000000000000..b42ef9391ac4
--- /dev/null
+++ b/0007-drm-i915-Serialise-i915_active_acquire-with-__active.patch
@@ -0,0 +1,79 @@
+From 167299b5c1cc6f0c1274271aec0ab2b9fec01594 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Thu, 5 Dec 2019 18:33:32 +0000
+Subject: [PATCH 07/14] drm/i915: Serialise i915_active_acquire() with
+ __active_retire()
+
+As __active_retire() does it's final atomic_dec() under the
+ref->tree_lock spinlock, in order to prevent ourselves from reusing the
+ref->cache and ref->tree as they are being destroyed, we need to
+serialise with the retirement during i915_active_acquire().
+
+[ +0.000005] kernel BUG at drivers/gpu/drm/i915/i915_active.c:157!
+[ +0.000011] invalid opcode: 0000 [#1] SMP
+[ +0.000004] CPU: 7 PID: 188 Comm: kworker/u16:4 Not tainted 5.4.0-rc8-03070-gac5e57322614 #89
+[ +0.000002] Hardware name: Razer Razer Blade Stealth 13 Late 2019/LY320, BIOS 1.02 09/10/2019
+[ +0.000082] Workqueue: events_unbound active_work [i915]
+[ +0.000059] RIP: 0010:__active_retire+0x115/0x120 [i915]
+[ +0.000003] Code: 75 28 48 8b 3d 8c 6e 1a 00 48 89 ee e8 e4 5f a5 c0 48 8b 44 24 10 65 48 33 04 25 28 00 00 00 75 0f 48 83 c4 18 5b 5d 41 5c c3 <0f> 0b 0f 0b 0f 0b e8 a0 90 87 c0 0f 1f 44 00 00 48 8b 3d 54 6e 1a
+[ +0.000002] RSP: 0018:ffffb833003f7e48 EFLAGS: 00010286
+[ +0.000003] RAX: ffff8d6e8d726d00 RBX: ffff8d6f9db4e840 RCX: 0000000000000000
+[ +0.000001] RDX: ffffffff82605930 RSI: ffff8d6f9adc4908 RDI: ffff8d6e96cefe28
+[ +0.000002] RBP: ffff8d6e96cefe00 R08: 0000000000000000 R09: ffff8d6f9ffe9a50
+[ +0.000002] R10: 0000000000000048 R11: 0000000000000018 R12: ffff8d6f9adc4930
+[ +0.000001] R13: ffff8d6f9e04fb00 R14: 0000000000000000 R15: ffff8d6f9adc4988
+[ +0.000002] FS: 0000000000000000(0000) GS:ffff8d6f9ffc0000(0000) knlGS:0000000000000000
+[ +0.000002] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+[ +0.000002] CR2: 000055eb5a34cf10 CR3: 000000018d609002 CR4: 0000000000760ee0
+[ +0.000002] PKRU: 55555554
+[ +0.000001] Call Trace:
+[ +0.000010] process_one_work+0x1aa/0x350
+[ +0.000004] worker_thread+0x4d/0x3a0
+[ +0.000004] kthread+0xfb/0x130
+[ +0.000004] ? process_one_work+0x350/0x350
+[ +0.000003] ? kthread_park+0x90/0x90
+[ +0.000005] ret_from_fork+0x1f/0x40
+
+Reported-by: Kenneth Graunke <kenneth@whitecape.org>
+Fixes: c9ad602feabe ("drm/i915: Split i915_active.mutex into an irq-safe spinlock for the rbtree")
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
+Cc: Kenneth Graunke <kenneth@whitecape.org>
+Cc: Matthew Auld <matthew.auld@intel.com>
+Tested-by: Kenneth Graunke <kenneth@whitecape.org>
+Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
+Link: https://patchwork.freedesktop.org/patch/msgid/20191205183332.801237-1-chris@chris-wilson.co.uk
+---
+ drivers/gpu/drm/i915/i915_active.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_active.c b/drivers/gpu/drm/i915/i915_active.c
+index a19e7d89bc8a..378b52d1ab74 100644
+--- a/drivers/gpu/drm/i915/i915_active.c
++++ b/drivers/gpu/drm/i915/i915_active.c
+@@ -91,10 +91,9 @@ static void debug_active_init(struct i915_active *ref)
+
+ static void debug_active_activate(struct i915_active *ref)
+ {
+- spin_lock_irq(&ref->tree_lock);
++ lockdep_assert_held(&ref->tree_lock);
+ if (!atomic_read(&ref->count)) /* before the first inc */
+ debug_object_activate(ref, &active_debug_desc);
+- spin_unlock_irq(&ref->tree_lock);
+ }
+
+ static void debug_active_deactivate(struct i915_active *ref)
+@@ -407,8 +406,10 @@ int i915_active_acquire(struct i915_active *ref)
+ if (!atomic_read(&ref->count) && ref->active)
+ err = ref->active(ref);
+ if (!err) {
++ spin_lock_irq(&ref->tree_lock); /* vs __active_retire() */
+ debug_active_activate(ref);
+ atomic_inc(&ref->count);
++ spin_unlock_irq(&ref->tree_lock);
+ }
+
+ mutex_unlock(&ref->mutex);
+--
+2.25.0
+
diff --git a/0008-drm-i915-gem-Take-runtime-pm-wakeref-prior-to-unbind.patch b/0008-drm-i915-gem-Take-runtime-pm-wakeref-prior-to-unbind.patch
new file mode 100644
index 000000000000..c575408efbdc
--- /dev/null
+++ b/0008-drm-i915-gem-Take-runtime-pm-wakeref-prior-to-unbind.patch
@@ -0,0 +1,130 @@
+From e3d3fd13d0ac1e12848b4f2a57e9e4bf2b557bf0 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Tue, 3 Dec 2019 10:13:46 +0000
+Subject: [PATCH 08/14] drm/i915/gem: Take runtime-pm wakeref prior to
+ unbinding
+
+Some machines require ACPI for runtime resume, and ACPI is quite kmalloc
+happy. We cannot handle kmalloc from inside the vm->mutex, as they are
+used by the shrinker, and so we must ensure the global runtime-pm is
+awake prior to unbinding to avoid the potential inversion.
+
+<4> [57.121748] ======================================================
+<4> [57.121750] WARNING: possible circular locking dependency detected
+<4> [57.121753] 5.4.0-rc8-CI-CI_DRM_7466+ #1 Tainted: G U
+<4> [57.121754] ------------------------------------------------------
+<4> [57.121756] i915_pm_rpm/1105 is trying to acquire lock:
+<4> [57.121758] ffffffff82263a40 (fs_reclaim){+.+.}, at: fs_reclaim_acquire.part.117+0x0/0x30
+<4> [57.121766]
+but task is already holding lock:
+<4> [57.121768] ffff888475a593c0 (&vm->mutex){+.+.}, at: i915_vma_unbind+0x21/0x50 [i915]
+<4> [57.121868]
+which lock already depends on the new lock.
+
+<4> [57.121869]
+the existing dependency chain (in reverse order) is:
+<4> [57.121871]
+-> #1 (&vm->mutex){+.+.}:
+<4> [57.121951] i915_gem_shrinker_taints_mutex+0xa2/0xd0 [i915]
+<4> [57.122028] i915_address_space_init+0xa9/0x170 [i915]
+<4> [57.122104] i915_ggtt_init_hw+0x47/0x130 [i915]
+<4> [57.122150] i915_driver_probe+0xbb4/0x15f0 [i915]
+<4> [57.122197] i915_pci_probe+0x43/0x1c0 [i915]
+<4> [57.122202] pci_device_probe+0x9e/0x120
+<4> [57.122206] really_probe+0xea/0x420
+<4> [57.122209] driver_probe_device+0x10b/0x120
+<4> [57.122212] device_driver_attach+0x4a/0x50
+<4> [57.122214] __driver_attach+0x97/0x130
+<4> [57.122217] bus_for_each_dev+0x74/0xc0
+<4> [57.122220] bus_add_driver+0x142/0x220
+<4> [57.122222] driver_register+0x56/0xf0
+<4> [57.122226] do_one_initcall+0x58/0x2ff
+<4> [57.122230] do_init_module+0x56/0x1f8
+<4> [57.122233] load_module+0x243e/0x29f0
+<4> [57.122236] __do_sys_finit_module+0xe9/0x110
+<4> [57.122239] do_syscall_64+0x4f/0x210
+<4> [57.122242] entry_SYSCALL_64_after_hwframe+0x49/0xbe
+<4> [57.122244]
+-> #0 (fs_reclaim){+.+.}:
+<4> [57.122249] __lock_acquire+0x1328/0x15d0
+<4> [57.122251] lock_acquire+0xa7/0x1c0
+<4> [57.122254] fs_reclaim_acquire.part.117+0x24/0x30
+<4> [57.122257] __kmalloc+0x48/0x320
+<4> [57.122261] acpi_ns_internalize_name+0x44/0x9b
+<4> [57.122264] acpi_ns_get_node_unlocked+0x6b/0xd3
+<4> [57.122267] acpi_ns_get_node+0x3b/0x50
+<4> [57.122271] acpi_get_handle+0x8a/0xb4
+<4> [57.122274] acpi_has_method+0x1c/0x40
+<4> [57.122278] acpi_pci_set_power_state+0x40/0xe0
+<4> [57.122281] pci_platform_power_transition+0x3e/0x90
+<4> [57.122284] pci_set_power_state+0x83/0xf0
+<4> [57.122287] pci_restore_standard_config+0x22/0x40
+<4> [57.122289] pci_pm_runtime_resume+0x23/0xc0
+<4> [57.122293] __rpm_callback+0xb1/0x110
+<4> [57.122296] rpm_callback+0x1a/0x70
+<4> [57.122299] rpm_resume+0x50e/0x790
+<4> [57.122302] __pm_runtime_resume+0x42/0x80
+<4> [57.122357] __intel_runtime_pm_get+0x15/0x60 [i915]
+<4> [57.122435] ggtt_unbind_vma+0x24/0x60 [i915]
+<4> [57.122514] __i915_vma_unbind.part.39+0xb5/0x500 [i915]
+<4> [57.122593] i915_vma_unbind+0x2d/0x50 [i915]
+<4> [57.122668] i915_gem_object_unbind+0x11c/0x260 [i915]
+<4> [57.122740] i915_gem_object_set_cache_level+0x32/0x90 [i915]
+<4> [57.122810] i915_gem_set_caching_ioctl+0x1f7/0x2f0 [i915]
+<4> [57.122815] drm_ioctl_kernel+0xa7/0xf0
+<4> [57.122818] drm_ioctl+0x2e1/0x390
+<4> [57.122822] do_vfs_ioctl+0xa0/0x6f0
+<4> [57.122825] ksys_ioctl+0x35/0x60
+<4> [57.122828] __x64_sys_ioctl+0x11/0x20
+<4> [57.122830] do_syscall_64+0x4f/0x210
+<4> [57.122833] entry_SYSCALL_64_after_hwframe+0x49/0xbe
+
+Closes: https://gitlab.freedesktop.org/drm/intel/issues/711
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Reviewed-by: Matthew Auld <matthew.auld@intel.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20191203101347.2836057-1-chris@chris-wilson.co.uk
+---
+ drivers/gpu/drm/i915/i915_gem.c | 17 ++++++++++++++++-
+ 1 file changed, 16 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index 3f07948ea4da..ed2436db5dd2 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -119,10 +119,23 @@ i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
+ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
+ unsigned long flags)
+ {
+- struct i915_vma *vma;
++ struct intel_runtime_pm *rpm = &to_i915(obj->base.dev)->runtime_pm;
+ LIST_HEAD(still_in_list);
++ intel_wakeref_t wakeref;
++ struct i915_vma *vma;
+ int ret = 0;
+
++ if (!atomic_read(&obj->bind_count))
++ return 0;
++
++ /*
++ * As some machines use ACPI to handle runtime-resume callbacks, and
++ * ACPI is quite kmalloc happy, we cannot resume beneath the vm->mutex
++ * as they are required by the shrinker. Ergo, we wake the device up
++ * first just in case.
++ */
++ wakeref = intel_runtime_pm_get(rpm);
++
+ spin_lock(&obj->vma.lock);
+ while (!ret && (vma = list_first_entry_or_null(&obj->vma.list,
+ struct i915_vma,
+@@ -146,6 +159,8 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
+ list_splice(&still_in_list, &obj->vma.list);
+ spin_unlock(&obj->vma.lock);
+
++ intel_runtime_pm_put(rpm, wakeref);
++
+ return ret;
+ }
+
+--
+2.25.0
+
diff --git a/0009-drm-i915-gem-Avoid-parking-the-vma-as-we-unbind.patch b/0009-drm-i915-gem-Avoid-parking-the-vma-as-we-unbind.patch
new file mode 100644
index 000000000000..4856289a1db3
--- /dev/null
+++ b/0009-drm-i915-gem-Avoid-parking-the-vma-as-we-unbind.patch
@@ -0,0 +1,63 @@
+From 89678e8921d00143665237e719f96cfc8425f804 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Tue, 3 Dec 2019 15:50:32 +0000
+Subject: [PATCH 09/14] drm/i915/gem: Avoid parking the vma as we unbind
+
+In order to avoid keeping a reference on the i915_vma (which is long
+overdue!) we have to coordinate all the possible lifetimes and only use
+the vma while we know it is alive. In this episode, we are reminded that
+while idle, the closed vma are destroyed. So if the GT idles while we are
+working with the vma, the vma itself becomes invalid.
+
+First class i915_vma here we come, but in the meantime keep piling on
+the straw.
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Reviewed-by: Matthew Auld <matthew.auld@intel.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20191203155032.3137263-1-chris@chris-wilson.co.uk
+---
+ drivers/gpu/drm/i915/i915_gem.c | 17 ++++++++++++++++-
+ 1 file changed, 16 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index ed2436db5dd2..739543812422 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -141,18 +141,33 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
+ struct i915_vma,
+ obj_link))) {
+ struct i915_address_space *vm = vma->vm;
++ bool awake = false;
+
+- ret = -EBUSY;
++ ret = -EAGAIN;
+ if (!i915_vm_tryopen(vm))
+ break;
+
++ /* Prevent vma being freed by i915_vma_parked as we unbind */
++ if (intel_gt_pm_get_if_awake(vm->gt)) {
++ awake = true;
++ } else {
++ if (i915_vma_is_closed(vma)) {
++ spin_unlock(&obj->vma.lock);
++ goto err_vm;
++ }
++ }
++
+ list_move_tail(&vma->obj_link, &still_in_list);
+ spin_unlock(&obj->vma.lock);
+
++ ret = -EBUSY;
+ if (flags & I915_GEM_OBJECT_UNBIND_ACTIVE ||
+ !i915_vma_is_active(vma))
+ ret = i915_vma_unbind(vma);
+
++ if (awake)
++ intel_gt_pm_put(vm->gt);
++err_vm:
+ i915_vm_close(vm);
+ spin_lock(&obj->vma.lock);
+ }
+--
+2.25.0
+
diff --git a/0010-drm-i915-gem-Try-to-flush-pending-unbind-events.patch b/0010-drm-i915-gem-Try-to-flush-pending-unbind-events.patch
new file mode 100644
index 000000000000..099cc5a4b7d4
--- /dev/null
+++ b/0010-drm-i915-gem-Try-to-flush-pending-unbind-events.patch
@@ -0,0 +1,64 @@
+From bfe34ef7e07d52ada331df8e1c5938906693b950 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Wed, 4 Dec 2019 12:35:56 +0000
+Subject: [PATCH 10/14] drm/i915/gem: Try to flush pending unbind events
+
+If we cannot handle a vma within the unbind loop, try to flush the
+pending events (i915_vma_parked, i915_vm_release) and try again. This
+avoids a round trip to userspace that is not guaranteed to make forward
+progress, as the events we wait upon require being idle.
+
+References: cb6c3d45f948 ("drm/i915/gem: Avoid parking the vma as we unbind")
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Cc: Matthew Auld <matthew.auld@intel.com>
+Reviewed-by: Matthew Auld <matthew.auld@intel.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20191204123556.3740002-1-chris@chris-wilson.co.uk
+---
+ drivers/gpu/drm/i915/i915_gem.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index 739543812422..85b12228c2cf 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -123,7 +123,7 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
+ LIST_HEAD(still_in_list);
+ intel_wakeref_t wakeref;
+ struct i915_vma *vma;
+- int ret = 0;
++ int ret;
+
+ if (!atomic_read(&obj->bind_count))
+ return 0;
+@@ -136,6 +136,8 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
+ */
+ wakeref = intel_runtime_pm_get(rpm);
+
++try_again:
++ ret = 0;
+ spin_lock(&obj->vma.lock);
+ while (!ret && (vma = list_first_entry_or_null(&obj->vma.list,
+ struct i915_vma,
+@@ -153,6 +155,7 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
+ } else {
+ if (i915_vma_is_closed(vma)) {
+ spin_unlock(&obj->vma.lock);
++ i915_vma_parked(vm->gt);
+ goto err_vm;
+ }
+ }
+@@ -174,6 +177,11 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
+ list_splice(&still_in_list, &obj->vma.list);
+ spin_unlock(&obj->vma.lock);
+
++ if (ret == -EAGAIN && flags & I915_GEM_OBJECT_UNBIND_ACTIVE) {
++ rcu_barrier(); /* flush the i915_vm_release() */
++ goto try_again;
++ }
++
+ intel_runtime_pm_put(rpm, wakeref);
+
+ return ret;
+--
+2.25.0
+
diff --git a/0011-drm-i915-gem-Reinitialise-the-local-list-before-repe.patch b/0011-drm-i915-gem-Reinitialise-the-local-list-before-repe.patch
new file mode 100644
index 000000000000..9e52b9321ddf
--- /dev/null
+++ b/0011-drm-i915-gem-Reinitialise-the-local-list-before-repe.patch
@@ -0,0 +1,34 @@
+From 52bc26b084be047fbc485f711dc2b88c0a1b2923 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Thu, 5 Dec 2019 13:29:12 +0000
+Subject: [PATCH 11/14] drm/i915/gem: Reinitialise the local list before
+ repeating
+
+As we may start the loop again, we require our local list of i915_vma
+we've processed to be reinitialised.
+
+Fixes: aa5e4453dc05 ("drm/i915/gem: Try to flush pending unbind events")
+Closes: https://gitlab.freedesktop.org/drm/intel/issues/731
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Reviewed-by: Andi Shyti <andi.shyti@intel.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20191205132912.606868-1-chris@chris-wilson.co.uk
+---
+ drivers/gpu/drm/i915/i915_gem.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index 85b12228c2cf..c2c025c4f4ad 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -174,7 +174,7 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
+ i915_vm_close(vm);
+ spin_lock(&obj->vma.lock);
+ }
+- list_splice(&still_in_list, &obj->vma.list);
++ list_splice_init(&still_in_list, &obj->vma.list);
+ spin_unlock(&obj->vma.lock);
+
+ if (ret == -EAGAIN && flags & I915_GEM_OBJECT_UNBIND_ACTIVE) {
+--
+2.25.0
+
diff --git a/0012-drm-i915-Add-a-simple-is-bound-check-before-unbindin.patch b/0012-drm-i915-Add-a-simple-is-bound-check-before-unbindin.patch
new file mode 100644
index 000000000000..1de38745dc39
--- /dev/null
+++ b/0012-drm-i915-Add-a-simple-is-bound-check-before-unbindin.patch
@@ -0,0 +1,41 @@
+From 513cbef093293a7f0e331eb4fee8e6a1bb9bf5a2 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Sun, 22 Dec 2019 21:02:54 +0000
+Subject: [PATCH 12/14] drm/i915: Add a simple is-bound check before unbinding
+
+Only acquire the various atomic references required to unbind the vma if
+we do need to unbind the vma.
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Acked-by: Imre Deak <imre.deak@intel.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20191222210256.2066451-1-chris@chris-wilson.co.uk
+---
+ drivers/gpu/drm/i915/i915_gem.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index c2c025c4f4ad..83eed642cbcd 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -145,6 +145,10 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
+ struct i915_address_space *vm = vma->vm;
+ bool awake = false;
+
++ list_move_tail(&vma->obj_link, &still_in_list);
++ if (!i915_vma_is_bound(vma, I915_VMA_BIND_MASK))
++ continue;
++
+ ret = -EAGAIN;
+ if (!i915_vm_tryopen(vm))
+ break;
+@@ -160,7 +164,6 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
+ }
+ }
+
+- list_move_tail(&vma->obj_link, &still_in_list);
+ spin_unlock(&obj->vma.lock);
+
+ ret = -EBUSY;
+--
+2.25.0
+
diff --git a/0013-drm-i915-Introduce-a-vma.kref.patch b/0013-drm-i915-Introduce-a-vma.kref.patch
new file mode 100644
index 000000000000..d78191a93ca3
--- /dev/null
+++ b/0013-drm-i915-Introduce-a-vma.kref.patch
@@ -0,0 +1,252 @@
+From 2029f44eb483a6ab7c0bc017cb699b7084f5eab4 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Sun, 22 Dec 2019 21:02:55 +0000
+Subject: [PATCH 13/14] drm/i915: Introduce a vma.kref
+
+Start introducing a kref on i915_vma in order to protect the vma unbind
+(i915_gem_object_unbind) from a parallel destruction (i915_vma_parked).
+Later, we will use the refcount to manage all access and turn i915_vma
+into a first class container.
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Cc: Imre Deak <imre.deak@intel.com>
+Acked-by: Imre Deak <imre.deak@intel.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20191222210256.2066451-2-chris@chris-wilson.co.uk
+---
+ drivers/gpu/drm/i915/gem/i915_gem_object.c | 2 +-
+ .../gpu/drm/i915/gem/selftests/huge_pages.c | 3 +--
+ .../drm/i915/gem/selftests/i915_gem_mman.c | 4 +--
+ drivers/gpu/drm/i915/i915_gem.c | 27 +++++++------------
+ drivers/gpu/drm/i915/i915_gem_gtt.c | 5 ++--
+ drivers/gpu/drm/i915/i915_vma.c | 9 ++++---
+ drivers/gpu/drm/i915/i915_vma.h | 25 ++++++++++++++---
+ 7 files changed, 44 insertions(+), 31 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c
+index a596548c07bf..b6937469ffd3 100644
+--- a/drivers/gpu/drm/i915/gem/i915_gem_object.c
++++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c
+@@ -174,7 +174,7 @@ static void __i915_gem_free_objects(struct drm_i915_private *i915,
+ GEM_BUG_ON(vma->obj != obj);
+ spin_unlock(&obj->vma.lock);
+
+- i915_vma_destroy(vma);
++ __i915_vma_put(vma);
+
+ spin_lock(&obj->vma.lock);
+ }
+diff --git a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
+index 688c49a24f32..bd1e2c12de63 100644
+--- a/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
++++ b/drivers/gpu/drm/i915/gem/selftests/huge_pages.c
+@@ -1110,8 +1110,7 @@ static int __igt_write_huge(struct intel_context *ce,
+ out_vma_unpin:
+ i915_vma_unpin(vma);
+ out_vma_close:
+- i915_vma_destroy(vma);
+-
++ __i915_vma_put(vma);
+ return err;
+ }
+
+diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
+index 29b2077b73d2..d226e55df8b2 100644
+--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
++++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
+@@ -161,7 +161,7 @@ static int check_partial_mapping(struct drm_i915_gem_object *obj,
+ kunmap(p);
+
+ out:
+- i915_vma_destroy(vma);
++ __i915_vma_put(vma);
+ return err;
+ }
+
+@@ -255,7 +255,7 @@ static int check_partial_mappings(struct drm_i915_gem_object *obj,
+ if (err)
+ return err;
+
+- i915_vma_destroy(vma);
++ __i915_vma_put(vma);
+
+ if (igt_timeout(end_time,
+ "%s: timed out after tiling=%d stride=%d\n",
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index 83eed642cbcd..0475a0343487 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -143,7 +143,6 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
+ struct i915_vma,
+ obj_link))) {
+ struct i915_address_space *vm = vma->vm;
+- bool awake = false;
+
+ list_move_tail(&vma->obj_link, &still_in_list);
+ if (!i915_vma_is_bound(vma, I915_VMA_BIND_MASK))
+@@ -154,26 +153,18 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
+ break;
+
+ /* Prevent vma being freed by i915_vma_parked as we unbind */
+- if (intel_gt_pm_get_if_awake(vm->gt)) {
+- awake = true;
+- } else {
+- if (i915_vma_is_closed(vma)) {
+- spin_unlock(&obj->vma.lock);
+- i915_vma_parked(vm->gt);
+- goto err_vm;
+- }
+- }
+-
++ vma = __i915_vma_get(vma);
+ spin_unlock(&obj->vma.lock);
+
+- ret = -EBUSY;
+- if (flags & I915_GEM_OBJECT_UNBIND_ACTIVE ||
+- !i915_vma_is_active(vma))
+- ret = i915_vma_unbind(vma);
++ if (vma) {
++ ret = -EBUSY;
++ if (flags & I915_GEM_OBJECT_UNBIND_ACTIVE ||
++ !i915_vma_is_active(vma))
++ ret = i915_vma_unbind(vma);
++
++ __i915_vma_put(vma);
++ }
+
+- if (awake)
+- intel_gt_pm_put(vm->gt);
+-err_vm:
+ i915_vm_close(vm);
+ spin_lock(&obj->vma.lock);
+ }
+diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
+index 44727806dfd7..dd2c20f7d4d2 100644
+--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
++++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
+@@ -522,7 +522,7 @@ void __i915_vm_close(struct i915_address_space *vm)
+
+ atomic_and(~I915_VMA_PIN_MASK, &vma->flags);
+ WARN_ON(__i915_vma_unbind(vma));
+- i915_vma_destroy(vma);
++ __i915_vma_put(vma);
+
+ i915_gem_object_put(obj);
+ }
+@@ -1790,7 +1790,7 @@ static void gen6_ppgtt_cleanup(struct i915_address_space *vm)
+ {
+ struct gen6_ppgtt *ppgtt = to_gen6_ppgtt(i915_vm_to_ppgtt(vm));
+
+- i915_vma_destroy(ppgtt->vma);
++ __i915_vma_put(ppgtt->vma);
+
+ gen6_ppgtt_free_pd(ppgtt);
+ free_scratch(vm);
+@@ -1878,6 +1878,7 @@ static struct i915_vma *pd_vma_create(struct gen6_ppgtt *ppgtt, int size)
+
+ i915_active_init(&vma->active, NULL, NULL);
+
++ kref_init(&vma->ref);
+ mutex_init(&vma->pages_mutex);
+ vma->vm = i915_vm_get(&ggtt->vm);
+ vma->ops = &pd_vma_ops;
+diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
+index 01c822256b39..00973017abba 100644
+--- a/drivers/gpu/drm/i915/i915_vma.c
++++ b/drivers/gpu/drm/i915/i915_vma.c
+@@ -112,6 +112,7 @@ vma_create(struct drm_i915_gem_object *obj,
+ if (vma == NULL)
+ return ERR_PTR(-ENOMEM);
+
++ kref_init(&vma->ref);
+ mutex_init(&vma->pages_mutex);
+ vma->vm = i915_vm_get(vm);
+ vma->ops = &vm->vma_ops;
+@@ -978,8 +979,10 @@ void i915_vma_reopen(struct i915_vma *vma)
+ __i915_vma_remove_closed(vma);
+ }
+
+-void i915_vma_destroy(struct i915_vma *vma)
++void i915_vma_release(struct kref *ref)
+ {
++ struct i915_vma *vma = container_of(ref, typeof(*vma), ref);
++
+ if (drm_mm_node_allocated(&vma->node)) {
+ mutex_lock(&vma->vm->mutex);
+ atomic_and(~I915_VMA_PIN_MASK, &vma->flags);
+@@ -1027,7 +1030,7 @@ void i915_vma_parked(struct intel_gt *gt)
+ spin_unlock_irq(&gt->closed_lock);
+
+ if (obj) {
+- i915_vma_destroy(vma);
++ __i915_vma_put(vma);
+ i915_gem_object_put(obj);
+ }
+
+@@ -1192,7 +1195,7 @@ int __i915_vma_unbind(struct i915_vma *vma)
+ i915_vma_detach(vma);
+ vma_unbind_pages(vma);
+
+- drm_mm_remove_node(&vma->node); /* pairs with i915_vma_destroy() */
++ drm_mm_remove_node(&vma->node); /* pairs with i915_vma_release() */
+ return 0;
+ }
+
+diff --git a/drivers/gpu/drm/i915/i915_vma.h b/drivers/gpu/drm/i915/i915_vma.h
+index 465932813bc5..ce1db908ad69 100644
+--- a/drivers/gpu/drm/i915/i915_vma.h
++++ b/drivers/gpu/drm/i915/i915_vma.h
+@@ -51,14 +51,19 @@ enum i915_cache_level;
+ */
+ struct i915_vma {
+ struct drm_mm_node node;
+- struct drm_i915_gem_object *obj;
++
+ struct i915_address_space *vm;
+ const struct i915_vma_ops *ops;
+- struct i915_fence_reg *fence;
++
++ struct drm_i915_gem_object *obj;
+ struct dma_resv *resv; /** Alias of obj->resv */
++
+ struct sg_table *pages;
+ void __iomem *iomap;
+ void *private; /* owned by creator */
++
++ struct i915_fence_reg *fence;
++
+ u64 size;
+ u64 display_alignment;
+ struct i915_page_sizes page_sizes;
+@@ -71,6 +76,7 @@ struct i915_vma {
+ * handles (but same file) for execbuf, i.e. the number of aliases
+ * that exist in the ctx->handle_vmas LUT for this vma.
+ */
++ struct kref ref;
+ atomic_t open_count;
+ atomic_t flags;
+ /**
+@@ -333,7 +339,20 @@ int __must_check i915_vma_unbind(struct i915_vma *vma);
+ void i915_vma_unlink_ctx(struct i915_vma *vma);
+ void i915_vma_close(struct i915_vma *vma);
+ void i915_vma_reopen(struct i915_vma *vma);
+-void i915_vma_destroy(struct i915_vma *vma);
++
++static inline struct i915_vma *__i915_vma_get(struct i915_vma *vma)
++{
++ if (kref_get_unless_zero(&vma->ref))
++ return vma;
++
++ return NULL;
++}
++
++void i915_vma_release(struct kref *ref);
++static inline void __i915_vma_put(struct i915_vma *vma)
++{
++ kref_put(&vma->ref, i915_vma_release);
++}
+
+ #define assert_vma_held(vma) dma_resv_assert_held((vma)->resv)
+
+--
+2.25.0
+
diff --git a/PKGBUILD b/PKGBUILD
index 42e8864c6942..d7c7edcec807 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -61,7 +61,7 @@ _localmodcfg=
### IMPORTANT: Do no edit below this line unless you know what you're doing
pkgbase=linux-ck
-pkgver=5.5.3
+pkgver=5.5.4
pkgrel=1
_ckpatchversion=1
arch=(x86_64)
@@ -82,22 +82,36 @@ source=(
0004-drm-i915-Wean-off-drm_pci_alloc-drm_pci_free.patch
0005-drm-Remove-PageReserved-manipulation-from-drm_pci_al.patch
0006-drm-i915-execlists-Always-force-a-context-reload-whe.patch
+ 0007-drm-i915-Serialise-i915_active_acquire-with-__active.patch
+ 0008-drm-i915-gem-Take-runtime-pm-wakeref-prior-to-unbind.patch
+ 0009-drm-i915-gem-Avoid-parking-the-vma-as-we-unbind.patch
+ 0010-drm-i915-gem-Try-to-flush-pending-unbind-events.patch
+ 0011-drm-i915-gem-Reinitialise-the-local-list-before-repe.patch
+ 0012-drm-i915-Add-a-simple-is-bound-check-before-unbindin.patch
+ 0013-drm-i915-Introduce-a-vma.kref.patch
)
validpgpkeys=(
'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds
'647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman
)
-sha256sums=('2bef3edcf44c746383045f4a809b2013e18c52319c827875ed8e89138951cab2'
+sha256sums=('ea40fd0deb0ba043c628ad4039c67ca9e4d8adc88d67d8b8c5a20f264403a6fb'
'SKIP'
'eb95e2f45dc868b097136d75077b8861b85fea109de78bff253fbf98162e5cb6'
'7a4a209de815f4bae49c7c577c0584c77257e3953ac4324d2aa425859ba657f5'
'37a9d61e8a0b5a73992e1397c3a9cc947d39e715f205f3c665eb157b96d58f98'
- 'c981eacffe1091fbd4b22fd6359163bea343591c44c7c53573391541eb943d17'
- 'a25a82ce5a7e84d7a580036a250aa4d2621ab0fdac0f375b40417a207f87cf87'
- 'd5b209bcd90d11fd83055ffe8aea617776101502908c4aefdc7f6f3bc3a87929'
- '03bcdd2668403cf7875bab86313cb4719dc35e202f4bb21c61c3646215a15be3'
- '49a63d402a35dcefe18e858b0c66d0983a075c003fcfb50426fd0ba79639fafe'
- '8e1e9cf077e774ac579bbaa7cb5932a1f96f50fad7a72fa998b868137c2472d3')
+ '2be34867fcb55a5ab7ee0f25b3fbe4da1b4c55fd118053c9510a9b1e87ed0960'
+ '39e2bd569c5efe83c2facddd9e0b846a6c35937b1280a9ddead5c150fa8ca10d'
+ '07d60156eb70be84adc1376a3d7434811f1373282c0b5198c4cd580c8bfcaa7e'
+ '853403b019a9495c72df52cabe85653590b9a4021343c09e2438c25b96aae163'
+ '8385a3771e4d747a8c6d06bb9a3dd73870fc378ded8d0d0f2b1388b89813719b'
+ '9556c74b7744ad863da61384d2b2b9e996be4652dd4d93d3fcab7f256b224f06'
+ 'fe4a15e4e85e0a1ab2e6e3ab790ba53eb5cf538b9a16b6e2327cb3c89f66fc75'
+ 'f0177eb3395c910064a9bbd7ae5849f0e6e0094227d2b01367978ca6553fc10c'
+ '51d6e34f69be927600edb3fddbd0dda75773fb28818bcc35f540cf14501e1ef6'
+ 'b74618c46e3d2f17d851ccf36d57142a2187787f0e1f529e72898b1d267ab422'
+ '586b7a558b47c443ccccbb6267ffe3fef59d14004b9d5c4591daca4999766fe9'
+ '466cd85077249c54168dba181378d590009f0bb7215a119d1bed6ebbdfe35cd5'
+ '127e6d1ead0c2ba5414038a7a3680e2303a230e88c55d2b6cbf35495dbe345e3')
export KBUILD_BUILD_HOST=archlinux
export KBUILD_BUILD_USER=$pkgbase