diff options
author | graysky | 2023-02-01 14:54:46 -0500 |
---|---|---|
committer | graysky | 2023-02-01 14:54:46 -0500 |
commit | d1a11808f859c6d16f6cf088c5bddfde2f373174 (patch) | |
tree | 75e04a64c4837f927905ec3f06685ab6b3836784 | |
parent | 3149fefa46f8290285eb5f6efc0215fd23509baa (diff) | |
download | aur-d1a11808f859c6d16f6cf088c5bddfde2f373174.tar.gz |
Update to 6.1.9-1
-rw-r--r-- | .SRCINFO | 22 | ||||
-rw-r--r-- | 0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch | 4 | ||||
-rw-r--r-- | 0002-Revert-drm-i915-improve-the-catch-all-evict-to-handl.patch | 231 | ||||
-rw-r--r-- | 0003-drm-i915-improve-the-catch-all-evict-to-handle-lock-.patch | 260 | ||||
-rw-r--r-- | 0004-drm-amdgpu-display-mst-Fix-mst_state-pbn_div-and-slo.patch | 88 | ||||
-rw-r--r-- | 0005-drm-amdgpu-display-mst-limit-payload-to-be-updated-o.patch | 105 | ||||
-rw-r--r-- | 0006-drm-amdgpu-display-mst-update-mst_mgr-relevant-varia.patch | 73 | ||||
-rw-r--r-- | 0007-drm-display-dp_mst-Correct-the-kref-of-port.patch | 44 | ||||
-rw-r--r-- | PKGBUILD | 18 |
9 files changed, 10 insertions, 835 deletions
@@ -1,5 +1,5 @@ pkgbase = linux-ck - pkgver = 6.1.8 + pkgver = 6.1.9 pkgrel = 1 url = https://wiki.archlinux.org/index.php/Linux-ck arch = x86_64 @@ -12,32 +12,20 @@ pkgbase = linux-ck makedepends = tar makedepends = xz options = !strip - source = https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.1.8.tar.xz - source = https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.1.8.tar.sign + source = https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.1.9.tar.xz + source = https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.1.9.tar.sign source = config source = more-uarches-20221217.tar.gz::https://github.com/graysky2/kernel_compiler_patch/archive/20221217.tar.gz source = ck-hrtimer-fdbdf7e0ec56cd59e11d024c473e766429271a5c.tar.gz::https://github.com/graysky2/linux-patches/archive/fdbdf7e0ec56cd59e11d024c473e766429271a5c.tar.gz source = 0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch - source = 0002-Revert-drm-i915-improve-the-catch-all-evict-to-handl.patch - source = 0003-drm-i915-improve-the-catch-all-evict-to-handle-lock-.patch - source = 0004-drm-amdgpu-display-mst-Fix-mst_state-pbn_div-and-slo.patch - source = 0005-drm-amdgpu-display-mst-limit-payload-to-be-updated-o.patch - source = 0006-drm-amdgpu-display-mst-update-mst_mgr-relevant-varia.patch - source = 0007-drm-display-dp_mst-Correct-the-kref-of-port.patch validpgpkeys = ABAF11C65A2970B130ABE3C479BE3E4300411886 validpgpkeys = 647F28654894E3BD457199BE38DBBDC86092693E - sha256sums = b60bb53ab8ba370a270454b11e93d41af29126fc72bd6ede517673e2e57b816d + sha256sums = d60cf185693c386e7acd9f3eb3a94ae30ffbfee0a9447a20e83711e0bdf5922b sha256sums = SKIP sha256sums = 1efa33aea067fa920880ef7fef3ec82f8d4cde21213eda34ac6534ca6879fca0 sha256sums = f1d586e111932890ad5e0df15d092fb9b3f87bae4ea17812aae9b0ec98fe2db0 sha256sums = 6d3b9cb4639c1c5eb4e2697aed0dbffa5b4a37d63a0861dec8315dd052723e0e - sha256sums = dd0a155f8be7face604741716e5ea1ccd47c7988d4db4476f9736def57a6ae86 - sha256sums = b734f0f038647618617226794298b1cc7f6928dd43d46f056486a7d664fff3e0 - sha256sums = b725cde6ef68dcb2fe59a1e8646938d95d25a7292910dceef1adaeae229749e6 - sha256sums = 1aaa3c58e4129804eb704fbb66e1fe9a18d37059516f4153bb375a406a3c373a - sha256sums = 6448060153217445d35f0f2191424acac53defe7a67f08cb7f7347c141bd535e - sha256sums = a3c9ed15a33b7e7f1f589e6b0b00482b78aa7a0044940e4e3f87ad542db9308e - sha256sums = 28d3e5daa705da23bdafc916695bc50cc8f65655c8965fb6d007d67dfa6cb52f + sha256sums = a730917aa1ab33e79c094b69c3eb3ce080e6f9f4cb7a5b64c3e6b9ef0c53e631 pkgname = linux-ck pkgdesc = The Linux kernel and modules with ck's hrtimer patches 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 d42ab9ecebe1..9fe75326c3fa 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 73febcbf40df1fb410fa3211ef7a8b539fe762a6 Mon Sep 17 00:00:00 2001 +From f0ffa0a84ec1cc86365350304c7ff1ff105c6433 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/8] ZEN: Add sysctl and CONFIG to disallow unprivileged +Subject: [PATCH 1/2] ZEN: Add sysctl and CONFIG to disallow unprivileged CLONE_NEWUSER Our default behavior continues to match the vanilla kernel. diff --git a/0002-Revert-drm-i915-improve-the-catch-all-evict-to-handl.patch b/0002-Revert-drm-i915-improve-the-catch-all-evict-to-handl.patch deleted file mode 100644 index 43b24b62790f..000000000000 --- a/0002-Revert-drm-i915-improve-the-catch-all-evict-to-handl.patch +++ /dev/null @@ -1,231 +0,0 @@ -From 1635d2bdd74f7ecea0a7cbbdd74f78b2f369a16e Mon Sep 17 00:00:00 2001 -From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org> -Date: Wed, 4 Jan 2023 17:25:32 +0100 -Subject: [PATCH 2/8] Revert "drm/i915: improve the catch-all evict to handle - lock contention" - -Will be replaced with the revision from mainline, which only adds -comment changes. - -This reverts commit 4b1f2367bcbd0cdb86c71ddbb5fc1041872b6766. ---- - .../gpu/drm/i915/gem/i915_gem_execbuffer.c | 25 ++----------- - drivers/gpu/drm/i915/gem/i915_gem_mman.c | 2 +- - drivers/gpu/drm/i915/i915_gem_evict.c | 37 +++++-------------- - drivers/gpu/drm/i915/i915_gem_evict.h | 4 +- - drivers/gpu/drm/i915/i915_vma.c | 2 +- - .../gpu/drm/i915/selftests/i915_gem_evict.c | 4 +- - 6 files changed, 18 insertions(+), 56 deletions(-) - -diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c -index f461e34cc5f0..68f2c3e5065a 100644 ---- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c -+++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c -@@ -759,44 +759,25 @@ static int eb_reserve(struct i915_execbuffer *eb) - * hopefully unbind (if still bound in the VM). Repeat until the VM is - * evicted. Finally we should be able bind everything. - */ -- for (pass = 0; pass <= 3; pass++) { -+ for (pass = 0; pass <= 2; pass++) { - int pin_flags = PIN_USER | PIN_VALIDATE; - - if (pass == 0) - pin_flags |= PIN_NONBLOCK; - - if (pass >= 1) -- unpinned = eb_unbind(eb, pass >= 2); -+ unpinned = eb_unbind(eb, pass == 2); - - if (pass == 2) { - err = mutex_lock_interruptible(&eb->context->vm->mutex); - if (!err) { -- err = i915_gem_evict_vm(eb->context->vm, &eb->ww, NULL); -+ err = i915_gem_evict_vm(eb->context->vm, &eb->ww); - mutex_unlock(&eb->context->vm->mutex); - } - if (err) - return err; - } - -- if (pass == 3) { --retry: -- err = mutex_lock_interruptible(&eb->context->vm->mutex); -- if (!err) { -- struct drm_i915_gem_object *busy_bo = NULL; -- -- err = i915_gem_evict_vm(eb->context->vm, &eb->ww, &busy_bo); -- mutex_unlock(&eb->context->vm->mutex); -- if (err && busy_bo) { -- err = i915_gem_object_lock(busy_bo, &eb->ww); -- i915_gem_object_put(busy_bo); -- if (!err) -- goto retry; -- } -- } -- if (err) -- return err; -- } -- - list_for_each_entry(ev, &eb->unbound, bind_link) { - err = eb_reserve_vma(eb, ev, pin_flags); - if (err) -diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c -index 354c1d6dab84..e63329bc8065 100644 ---- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c -+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c -@@ -369,7 +369,7 @@ static vm_fault_t vm_fault_gtt(struct vm_fault *vmf) - if (vma == ERR_PTR(-ENOSPC)) { - ret = mutex_lock_interruptible(&ggtt->vm.mutex); - if (!ret) { -- ret = i915_gem_evict_vm(&ggtt->vm, &ww, NULL); -+ ret = i915_gem_evict_vm(&ggtt->vm, &ww); - mutex_unlock(&ggtt->vm.mutex); - } - if (ret) -diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c b/drivers/gpu/drm/i915/i915_gem_evict.c -index a4b4d9b7d26c..f025ee4fa526 100644 ---- a/drivers/gpu/drm/i915/i915_gem_evict.c -+++ b/drivers/gpu/drm/i915/i915_gem_evict.c -@@ -416,11 +416,6 @@ int i915_gem_evict_for_node(struct i915_address_space *vm, - * @vm: Address space to cleanse - * @ww: An optional struct i915_gem_ww_ctx. If not NULL, i915_gem_evict_vm - * will be able to evict vma's locked by the ww as well. -- * @busy_bo: Optional pointer to struct drm_i915_gem_object. If not NULL, then -- * in the event i915_gem_evict_vm() is unable to trylock an object for eviction, -- * then @busy_bo will point to it. -EBUSY is also returned. The caller must drop -- * the vm->mutex, before trying again to acquire the contended lock. The caller -- * also owns a reference to the object. - * - * This function evicts all vmas from a vm. - * -@@ -430,8 +425,7 @@ int i915_gem_evict_for_node(struct i915_address_space *vm, - * To clarify: This is for freeing up virtual address space, not for freeing - * memory in e.g. the shrinker. - */ --int i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, -- struct drm_i915_gem_object **busy_bo) -+int i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww) - { - int ret = 0; - -@@ -463,22 +457,15 @@ int i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, - * the resv is shared among multiple objects, we still - * need the object ref. - */ -- if (!i915_gem_object_get_rcu(vma->obj) || -+ if (dying_vma(vma) || - (ww && (dma_resv_locking_ctx(vma->obj->base.resv) == &ww->ctx))) { - __i915_vma_pin(vma); - list_add(&vma->evict_link, &locked_eviction_list); - continue; - } - -- if (!i915_gem_object_trylock(vma->obj, ww)) { -- if (busy_bo) { -- *busy_bo = vma->obj; /* holds ref */ -- ret = -EBUSY; -- break; -- } -- i915_gem_object_put(vma->obj); -+ if (!i915_gem_object_trylock(vma->obj, ww)) - continue; -- } - - __i915_vma_pin(vma); - list_add(&vma->evict_link, &eviction_list); -@@ -486,29 +473,25 @@ int i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, - if (list_empty(&eviction_list) && list_empty(&locked_eviction_list)) - break; - -+ ret = 0; - /* Unbind locked objects first, before unlocking the eviction_list */ - list_for_each_entry_safe(vma, vn, &locked_eviction_list, evict_link) { - __i915_vma_unpin(vma); - -- if (ret == 0) { -+ if (ret == 0) - ret = __i915_vma_unbind(vma); -- if (ret != -EINTR) /* "Get me out of here!" */ -- ret = 0; -- } -- if (!dying_vma(vma)) -- i915_gem_object_put(vma->obj); -+ if (ret != -EINTR) /* "Get me out of here!" */ -+ ret = 0; - } - - list_for_each_entry_safe(vma, vn, &eviction_list, evict_link) { - __i915_vma_unpin(vma); -- if (ret == 0) { -+ if (ret == 0) - ret = __i915_vma_unbind(vma); -- if (ret != -EINTR) /* "Get me out of here!" */ -- ret = 0; -- } -+ if (ret != -EINTR) /* "Get me out of here!" */ -+ ret = 0; - - i915_gem_object_unlock(vma->obj); -- i915_gem_object_put(vma->obj); - } - } while (ret == 0); - -diff --git a/drivers/gpu/drm/i915/i915_gem_evict.h b/drivers/gpu/drm/i915/i915_gem_evict.h -index bf0ee0e4fe60..e593c530f9bd 100644 ---- a/drivers/gpu/drm/i915/i915_gem_evict.h -+++ b/drivers/gpu/drm/i915/i915_gem_evict.h -@@ -11,7 +11,6 @@ - struct drm_mm_node; - struct i915_address_space; - struct i915_gem_ww_ctx; --struct drm_i915_gem_object; - - int __must_check i915_gem_evict_something(struct i915_address_space *vm, - struct i915_gem_ww_ctx *ww, -@@ -24,7 +23,6 @@ int __must_check i915_gem_evict_for_node(struct i915_address_space *vm, - struct drm_mm_node *node, - unsigned int flags); - int i915_gem_evict_vm(struct i915_address_space *vm, -- struct i915_gem_ww_ctx *ww, -- struct drm_i915_gem_object **busy_bo); -+ struct i915_gem_ww_ctx *ww); - - #endif /* __I915_GEM_EVICT_H__ */ -diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c -index c8ad8f37e5cf..0fd46ba89549 100644 ---- a/drivers/gpu/drm/i915/i915_vma.c -+++ b/drivers/gpu/drm/i915/i915_vma.c -@@ -1569,7 +1569,7 @@ static int __i915_ggtt_pin(struct i915_vma *vma, struct i915_gem_ww_ctx *ww, - * locked objects when called from execbuf when pinning - * is removed. This would probably regress badly. - */ -- i915_gem_evict_vm(vm, NULL, NULL); -+ i915_gem_evict_vm(vm, NULL); - mutex_unlock(&vm->mutex); - } - } while (1); -diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c -index 37068542aafe..8c6517d29b8e 100644 ---- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c -+++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c -@@ -344,7 +344,7 @@ static int igt_evict_vm(void *arg) - - /* Everything is pinned, nothing should happen */ - mutex_lock(&ggtt->vm.mutex); -- err = i915_gem_evict_vm(&ggtt->vm, NULL, NULL); -+ err = i915_gem_evict_vm(&ggtt->vm, NULL); - mutex_unlock(&ggtt->vm.mutex); - if (err) { - pr_err("i915_gem_evict_vm on a full GGTT returned err=%d]\n", -@@ -356,7 +356,7 @@ static int igt_evict_vm(void *arg) - - for_i915_gem_ww(&ww, err, false) { - mutex_lock(&ggtt->vm.mutex); -- err = i915_gem_evict_vm(&ggtt->vm, &ww, NULL); -+ err = i915_gem_evict_vm(&ggtt->vm, &ww); - mutex_unlock(&ggtt->vm.mutex); - } - --- -2.39.1 - diff --git a/0003-drm-i915-improve-the-catch-all-evict-to-handle-lock-.patch b/0003-drm-i915-improve-the-catch-all-evict-to-handle-lock-.patch deleted file mode 100644 index 6d7c4834a612..000000000000 --- a/0003-drm-i915-improve-the-catch-all-evict-to-handle-lock-.patch +++ /dev/null @@ -1,260 +0,0 @@ -From ad3af346ebfb9b31d39ffeb57820617acf9902a8 Mon Sep 17 00:00:00 2001 -From: Matthew Auld <matthew.auld@intel.com> -Date: Fri, 16 Dec 2022 11:34:56 +0000 -Subject: [PATCH 3/8] drm/i915: improve the catch-all evict to handle lock - contention -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The catch-all evict can fail due to object lock contention, since it -only goes as far as trylocking the object, due to us already holding the -vm->mutex. Doing a full object lock here can deadlock, since the -vm->mutex is always our inner lock. Add another execbuf pass which drops -the vm->mutex and then tries to grab the object will the full lock, -before then retrying the eviction. This should be good enough for now to -fix the immediate regression with userspace seeing -ENOSPC from execbuf -due to contended object locks during GTT eviction. - -v2 (Mani) - - Also revamp the docs for the different passes. - -Testcase: igt@gem_ppgtt@shrink-vs-evict-* -Fixes: 7e00897be8bf ("drm/i915: Add object locking to i915_gem_evict_for_node and i915_gem_evict_something, v2.") -References: https://gitlab.freedesktop.org/drm/intel/-/issues/7627 -References: https://gitlab.freedesktop.org/drm/intel/-/issues/7570 -References: https://bugzilla.mozilla.org/show_bug.cgi?id=1779558 -Signed-off-by: Matthew Auld <matthew.auld@intel.com> -Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> -Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com> -Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> -Cc: Andrzej Hajda <andrzej.hajda@intel.com> -Cc: Mani Milani <mani@chromium.org> -Cc: <stable@vger.kernel.org> # v5.18+ -Reviewed-by: Mani Milani <mani@chromium.org> -Tested-by: Mani Milani <mani@chromium.org> -Link: https://patchwork.freedesktop.org/patch/msgid/20221216113456.414183-1-matthew.auld@intel.com -(cherry picked from commit 801fa7a81f6da533cc5442fc40e32c72b76cd42a) -Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> -(cherry picked from commit 3f882f2d4f689627c1566c2c92087bc3ff734953) ---- - .../gpu/drm/i915/gem/i915_gem_execbuffer.c | 25 +++++++++++-- - drivers/gpu/drm/i915/gem/i915_gem_mman.c | 2 +- - drivers/gpu/drm/i915/i915_gem_evict.c | 37 ++++++++++++++----- - drivers/gpu/drm/i915/i915_gem_evict.h | 4 +- - drivers/gpu/drm/i915/i915_vma.c | 2 +- - .../gpu/drm/i915/selftests/i915_gem_evict.c | 4 +- - 6 files changed, 56 insertions(+), 18 deletions(-) - -diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c -index 68f2c3e5065a..f461e34cc5f0 100644 ---- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c -+++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c -@@ -759,25 +759,44 @@ static int eb_reserve(struct i915_execbuffer *eb) - * hopefully unbind (if still bound in the VM). Repeat until the VM is - * evicted. Finally we should be able bind everything. - */ -- for (pass = 0; pass <= 2; pass++) { -+ for (pass = 0; pass <= 3; pass++) { - int pin_flags = PIN_USER | PIN_VALIDATE; - - if (pass == 0) - pin_flags |= PIN_NONBLOCK; - - if (pass >= 1) -- unpinned = eb_unbind(eb, pass == 2); -+ unpinned = eb_unbind(eb, pass >= 2); - - if (pass == 2) { - err = mutex_lock_interruptible(&eb->context->vm->mutex); - if (!err) { -- err = i915_gem_evict_vm(eb->context->vm, &eb->ww); -+ err = i915_gem_evict_vm(eb->context->vm, &eb->ww, NULL); - mutex_unlock(&eb->context->vm->mutex); - } - if (err) - return err; - } - -+ if (pass == 3) { -+retry: -+ err = mutex_lock_interruptible(&eb->context->vm->mutex); -+ if (!err) { -+ struct drm_i915_gem_object *busy_bo = NULL; -+ -+ err = i915_gem_evict_vm(eb->context->vm, &eb->ww, &busy_bo); -+ mutex_unlock(&eb->context->vm->mutex); -+ if (err && busy_bo) { -+ err = i915_gem_object_lock(busy_bo, &eb->ww); -+ i915_gem_object_put(busy_bo); -+ if (!err) -+ goto retry; -+ } -+ } -+ if (err) -+ return err; -+ } -+ - list_for_each_entry(ev, &eb->unbound, bind_link) { - err = eb_reserve_vma(eb, ev, pin_flags); - if (err) -diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c b/drivers/gpu/drm/i915/gem/i915_gem_mman.c -index e63329bc8065..354c1d6dab84 100644 ---- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c -+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c -@@ -369,7 +369,7 @@ static vm_fault_t vm_fault_gtt(struct vm_fault *vmf) - if (vma == ERR_PTR(-ENOSPC)) { - ret = mutex_lock_interruptible(&ggtt->vm.mutex); - if (!ret) { -- ret = i915_gem_evict_vm(&ggtt->vm, &ww); -+ ret = i915_gem_evict_vm(&ggtt->vm, &ww, NULL); - mutex_unlock(&ggtt->vm.mutex); - } - if (ret) -diff --git a/drivers/gpu/drm/i915/i915_gem_evict.c b/drivers/gpu/drm/i915/i915_gem_evict.c -index f025ee4fa526..a4b4d9b7d26c 100644 ---- a/drivers/gpu/drm/i915/i915_gem_evict.c -+++ b/drivers/gpu/drm/i915/i915_gem_evict.c -@@ -416,6 +416,11 @@ int i915_gem_evict_for_node(struct i915_address_space *vm, - * @vm: Address space to cleanse - * @ww: An optional struct i915_gem_ww_ctx. If not NULL, i915_gem_evict_vm - * will be able to evict vma's locked by the ww as well. -+ * @busy_bo: Optional pointer to struct drm_i915_gem_object. If not NULL, then -+ * in the event i915_gem_evict_vm() is unable to trylock an object for eviction, -+ * then @busy_bo will point to it. -EBUSY is also returned. The caller must drop -+ * the vm->mutex, before trying again to acquire the contended lock. The caller -+ * also owns a reference to the object. - * - * This function evicts all vmas from a vm. - * -@@ -425,7 +430,8 @@ int i915_gem_evict_for_node(struct i915_address_space *vm, - * To clarify: This is for freeing up virtual address space, not for freeing - * memory in e.g. the shrinker. - */ --int i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww) -+int i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, -+ struct drm_i915_gem_object **busy_bo) - { - int ret = 0; - -@@ -457,15 +463,22 @@ int i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww) - * the resv is shared among multiple objects, we still - * need the object ref. - */ -- if (dying_vma(vma) || -+ if (!i915_gem_object_get_rcu(vma->obj) || - (ww && (dma_resv_locking_ctx(vma->obj->base.resv) == &ww->ctx))) { - __i915_vma_pin(vma); - list_add(&vma->evict_link, &locked_eviction_list); - continue; - } - -- if (!i915_gem_object_trylock(vma->obj, ww)) -+ if (!i915_gem_object_trylock(vma->obj, ww)) { -+ if (busy_bo) { -+ *busy_bo = vma->obj; /* holds ref */ -+ ret = -EBUSY; -+ break; -+ } -+ i915_gem_object_put(vma->obj); - continue; -+ } - - __i915_vma_pin(vma); - list_add(&vma->evict_link, &eviction_list); -@@ -473,25 +486,29 @@ int i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww) - if (list_empty(&eviction_list) && list_empty(&locked_eviction_list)) - break; - -- ret = 0; - /* Unbind locked objects first, before unlocking the eviction_list */ - list_for_each_entry_safe(vma, vn, &locked_eviction_list, evict_link) { - __i915_vma_unpin(vma); - -- if (ret == 0) -+ if (ret == 0) { - ret = __i915_vma_unbind(vma); -- if (ret != -EINTR) /* "Get me out of here!" */ -- ret = 0; -+ if (ret != -EINTR) /* "Get me out of here!" */ -+ ret = 0; -+ } -+ if (!dying_vma(vma)) -+ i915_gem_object_put(vma->obj); - } - - list_for_each_entry_safe(vma, vn, &eviction_list, evict_link) { - __i915_vma_unpin(vma); -- if (ret == 0) -+ if (ret == 0) { - ret = __i915_vma_unbind(vma); -- if (ret != -EINTR) /* "Get me out of here!" */ -- ret = 0; -+ if (ret != -EINTR) /* "Get me out of here!" */ -+ ret = 0; -+ } - - i915_gem_object_unlock(vma->obj); -+ i915_gem_object_put(vma->obj); - } - } while (ret == 0); - -diff --git a/drivers/gpu/drm/i915/i915_gem_evict.h b/drivers/gpu/drm/i915/i915_gem_evict.h -index e593c530f9bd..bf0ee0e4fe60 100644 ---- a/drivers/gpu/drm/i915/i915_gem_evict.h -+++ b/drivers/gpu/drm/i915/i915_gem_evict.h -@@ -11,6 +11,7 @@ - struct drm_mm_node; - struct i915_address_space; - struct i915_gem_ww_ctx; -+struct drm_i915_gem_object; - - int __must_check i915_gem_evict_something(struct i915_address_space *vm, - struct i915_gem_ww_ctx *ww, -@@ -23,6 +24,7 @@ int __must_check i915_gem_evict_for_node(struct i915_address_space *vm, - struct drm_mm_node *node, - unsigned int flags); - int i915_gem_evict_vm(struct i915_address_space *vm, -- struct i915_gem_ww_ctx *ww); -+ struct i915_gem_ww_ctx *ww, -+ struct drm_i915_gem_object **busy_bo); - - #endif /* __I915_GEM_EVICT_H__ */ -diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c -index 0fd46ba89549..c8ad8f37e5cf 100644 ---- a/drivers/gpu/drm/i915/i915_vma.c -+++ b/drivers/gpu/drm/i915/i915_vma.c -@@ -1569,7 +1569,7 @@ static int __i915_ggtt_pin(struct i915_vma *vma, struct i915_gem_ww_ctx *ww, - * locked objects when called from execbuf when pinning - * is removed. This would probably regress badly. - */ -- i915_gem_evict_vm(vm, NULL); -+ i915_gem_evict_vm(vm, NULL, NULL); - mutex_unlock(&vm->mutex); - } - } while (1); -diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c -index 8c6517d29b8e..37068542aafe 100644 ---- a/drivers/gpu/drm/i915/selftests/i915_gem_evict.c -+++ b/drivers/gpu/drm/i915/selftests/i915_gem_evict.c -@@ -344,7 +344,7 @@ static int igt_evict_vm(void *arg) - - /* Everything is pinned, nothing should happen */ - mutex_lock(&ggtt->vm.mutex); -- err = i915_gem_evict_vm(&ggtt->vm, NULL); -+ err = i915_gem_evict_vm(&ggtt->vm, NULL, NULL); - mutex_unlock(&ggtt->vm.mutex); - if (err) { - pr_err("i915_gem_evict_vm on a full GGTT returned err=%d]\n", -@@ -356,7 +356,7 @@ static int igt_evict_vm(void *arg) - - for_i915_gem_ww(&ww, err, false) { - mutex_lock(&ggtt->vm.mutex); -- err = i915_gem_evict_vm(&ggtt->vm, &ww); -+ err = i915_gem_evict_vm(&ggtt->vm, &ww, NULL); - mutex_unlock(&ggtt->vm.mutex); - } - --- -2.39.1 - diff --git a/0004-drm-amdgpu-display-mst-Fix-mst_state-pbn_div-and-slo.patch b/0004-drm-amdgpu-display-mst-Fix-mst_state-pbn_div-and-slo.patch deleted file mode 100644 index 870cb3d99adb..000000000000 --- a/0004-drm-amdgpu-display-mst-Fix-mst_state-pbn_div-and-slo.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 688c752c92a868114d754da67a6d109dc1903e9a Mon Sep 17 00:00:00 2001 -From: Lyude Paul <lyude@redhat.com> -Date: Wed, 23 Nov 2022 14:50:16 -0500 -Subject: [PATCH 4/8] drm/amdgpu/display/mst: Fix mst_state->pbn_div and slot - count assignments - -Looks like I made a pretty big mistake here without noticing: it seems when -I moved the assignments of mst_state->pbn_div I completely missed the fact -that the reason for us calling drm_dp_mst_update_slots() earlier was to -account for the fact that we need to call this function using info from the -root MST connector, instead of just trying to do this from each MST -encoder's atomic check function. Otherwise, we end up filling out all of -DC's link information with zeroes. - -So, let's restore that and hopefully fix this DSC regression. - -Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2171 -Signed-off-by: Lyude Paul <lyude@redhat.com> -Signed-off-by: Harry Wentland <harry.wentland@amd.com> -Fixes: 4d07b0bc4034 ("drm/display/dp_mst: Move all payload info into the atomic state") -Cc: stable@vger.kernel.org # 6.1 -Acked-by: Harry Wentland <harry.wentland@amd.com> ---- - .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 24 +++++++++++++++++++ - .../display/amdgpu_dm/amdgpu_dm_mst_types.c | 5 ---- - 2 files changed, 24 insertions(+), 5 deletions(-) - -diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -index e10f1f15c9c4..e7ff09bdf533 100644 ---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -@@ -9397,6 +9397,8 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, - struct drm_connector_state *old_con_state, *new_con_state; - struct drm_crtc *crtc; - struct drm_crtc_state *old_crtc_state, *new_crtc_state; -+ struct drm_dp_mst_topology_mgr *mgr; -+ struct drm_dp_mst_topology_state *mst_state; - struct drm_plane *plane; - struct drm_plane_state *old_plane_state, *new_plane_state; - enum dc_status status; -@@ -9652,6 +9654,28 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, - lock_and_validation_needed = true; - } - -+#if defined(CONFIG_DRM_AMD_DC_DCN) -+ /* set the slot info for each mst_state based on the link encoding format */ -+ for_each_new_mst_mgr_in_state(state, mgr, mst_state, i) { -+ struct amdgpu_dm_connector *aconnector; -+ struct drm_connector *connector; -+ struct drm_connector_list_iter iter; -+ u8 link_coding_cap; -+ -+ drm_connector_list_iter_begin(dev, &iter); -+ drm_for_each_connector_iter(connector, &iter) { -+ if (connector->index == mst_state->mgr->conn_base_id) { -+ aconnector = to_amdgpu_dm_connector(connector); -+ link_coding_cap = dc_link_dp_mst_decide_link_encoding_format(aconnector->dc_link); -+ drm_dp_mst_update_slots(mst_state, link_coding_cap); -+ -+ break; -+ } -+ } -+ drm_connector_list_iter_end(&iter); -+ } -+#endif -+ - /** - * Streams and planes are reset when there are changes that affect - * bandwidth. Anything that affects bandwidth needs to go through -diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c -index 6483ba266893..4acd0b4afb48 100644 ---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c -+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c -@@ -897,11 +897,6 @@ static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state, - if (IS_ERR(mst_state)) - return PTR_ERR(mst_state); - -- mst_state->pbn_div = dm_mst_get_pbn_divider(dc_link); --#if defined(CONFIG_DRM_AMD_DC_DCN) -- drm_dp_mst_update_slots(mst_state, dc_link_dp_mst_decide_link_encoding_format(dc_link)); --#endif -- - /* Set up params */ - for (i = 0; i < dc_state->stream_count; i++) { - struct dc_dsc_policy dsc_policy = {0}; --- -2.39.1 - diff --git a/0005-drm-amdgpu-display-mst-limit-payload-to-be-updated-o.patch b/0005-drm-amdgpu-display-mst-limit-payload-to-be-updated-o.patch deleted file mode 100644 index be1dfdf5f577..000000000000 --- a/0005-drm-amdgpu-display-mst-limit-payload-to-be-updated-o.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 50811dff5e09b96380a305d5e44de1f17d9cd7c0 Mon Sep 17 00:00:00 2001 -From: Wayne Lin <Wayne.Lin@amd.com> -Date: Fri, 9 Dec 2022 19:05:33 +0800 -Subject: [PATCH 5/8] drm/amdgpu/display/mst: limit payload to be updated one - by one - -[Why] -amdgpu expects to update payload table for one stream one time -by calling dm_helpers_dp_mst_write_payload_allocation_table(). -Currently, it get modified to try to update HW payload table -at once by referring mst_state. - -[How] -This is just a quick workaround. Should find way to remove the -temporary struct dc_dp_mst_stream_allocation_table later if set -struct link_mst_stream_allocatio directly is possible. - -Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2171 -Signed-off-by: Wayne Lin <Wayne.Lin@amd.com> -Signed-off-by: Harry Wentland <harry.wentland@amd.com> -Fixes: 4d07b0bc4034 ("drm/display/dp_mst: Move all payload info into the atomic state") -Cc: stable@vger.kernel.org # 6.1 -Acked-by: Harry Wentland <harry.wentland@amd.com> ---- - .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 51 ++++++++++++++----- - 1 file changed, 39 insertions(+), 12 deletions(-) - -diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c -index f72c013d3a5b..16623f73ddbe 100644 ---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c -+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c -@@ -120,23 +120,50 @@ enum dc_edid_status dm_helpers_parse_edid_caps( - } - - static void --fill_dc_mst_payload_table_from_drm(struct drm_dp_mst_topology_state *mst_state, -- struct amdgpu_dm_connector *aconnector, -+fill_dc_mst_payload_table_from_drm(struct dc_link *link, -+ bool enable, -+ struct drm_dp_mst_atomic_payload *target_payload, - struct dc_dp_mst_stream_allocation_table *table) - { - struct dc_dp_mst_stream_allocation_table new_table = { 0 }; - struct dc_dp_mst_stream_allocation *sa; -- struct drm_dp_mst_atomic_payload *payload; -+ struct link_mst_stream_allocation_table copy_of_link_table = -+ link->mst_stream_alloc_table; -+ -+ int i; -+ int current_hw_table_stream_cnt = copy_of_link_table.stream_count; -+ struct link_mst_stream_allocation *dc_alloc; -+ -+ /* TODO: refactor to set link->mst_stream_alloc_table directly if possible.*/ -+ if (enable) { -+ dc_alloc = -+ ©_of_link_table.stream_allocations[current_hw_table_stream_cnt]; -+ dc_alloc->vcp_id = target_payload->vcpi; -+ dc_alloc->slot_count = target_payload->time_slots; -+ } else { -+ for (i = 0; i < copy_of_link_table.stream_count; i++) { -+ dc_alloc = -+ ©_of_link_table.stream_allocations[i]; -+ -+ if (dc_alloc->vcp_id == target_payload->vcpi) { -+ dc_alloc->vcp_id = 0; -+ dc_alloc->slot_count = 0; -+ break; -+ } -+ } -+ ASSERT(i != copy_of_link_table.stream_count); -+ } - - /* Fill payload info*/ -- list_for_each_entry(payload, &mst_state->payloads, next) { -- if (payload->delete) -- continue; -- -- sa = &new_table.stream_allocations[new_table.stream_count]; -- sa->slot_count = payload->time_slots; -- sa->vcp_id = payload->vcpi; -- new_table.stream_count++; -+ for (i = 0; i < MAX_CONTROLLER_NUM; i++) { -+ dc_alloc = -+ ©_of_link_table.stream_allocations[i]; -+ if (dc_alloc->vcp_id > 0 && dc_alloc->slot_count > 0) { -+ sa = &new_table.stream_allocations[new_table.stream_count]; -+ sa->slot_count = dc_alloc->slot_count; -+ sa->vcp_id = dc_alloc->vcp_id; -+ new_table.stream_count++; -+ } - } - - /* Overwrite the old table */ -@@ -185,7 +212,7 @@ bool dm_helpers_dp_mst_write_payload_allocation_table( - * AUX message. The sequence is slot 1-63 allocated sequence for each - * stream. AMD ASIC stream slot allocation should follow the same - * sequence. copy DRM MST allocation to dc */ -- fill_dc_mst_payload_table_from_drm(mst_state, aconnector, proposed_table); -+ fill_dc_mst_payload_table_from_drm(stream->link, enable, payload, proposed_table); - - return true; - } --- -2.39.1 - diff --git a/0006-drm-amdgpu-display-mst-update-mst_mgr-relevant-varia.patch b/0006-drm-amdgpu-display-mst-update-mst_mgr-relevant-varia.patch deleted file mode 100644 index 361cfa02308a..000000000000 --- a/0006-drm-amdgpu-display-mst-update-mst_mgr-relevant-varia.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 40b9d0489f5ab85733605a5112f4f6bb22ec7c9e Mon Sep 17 00:00:00 2001 -From: Wayne Lin <Wayne.Lin@amd.com> -Date: Mon, 12 Dec 2022 15:41:18 +0800 -Subject: [PATCH 6/8] drm/amdgpu/display/mst: update mst_mgr relevant variable - when long HPD - -[Why & How] -Now the vc_start_slot is controlled at drm side. When we -service a long HPD, we still need to run -dm_helpers_dp_mst_write_payload_allocation_table() to update -drm mst_mgr's relevant variable. Otherwise, on the next plug-in, -payload will get assigned with a wrong start slot. - -Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2171 -Signed-off-by: Wayne Lin <Wayne.Lin@amd.com> -Signed-off-by: Harry Wentland <harry.wentland@amd.com> -Fixes: 4d07b0bc4034 ("drm/display/dp_mst: Move all payload info into the atomic state") -Cc: stable@vger.kernel.org # 6.1 -Acked-by: Harry Wentland <harry.wentland@amd.com> ---- - drivers/gpu/drm/amd/display/dc/core/dc_link.c | 14 ++++++++++++-- - 1 file changed, 12 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c -index d7b1ace6328a..40b9d2ce08e6 100644 ---- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c -+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c -@@ -3995,10 +3995,13 @@ static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx) - struct fixed31_32 avg_time_slots_per_mtp = dc_fixpt_from_int(0); - int i; - bool mst_mode = (link->type == dc_connection_mst_branch); -+ /* adjust for drm changes*/ -+ bool update_drm_mst_state = true; - const struct link_hwss *link_hwss = get_link_hwss(link, &pipe_ctx->link_res); - const struct dc_link_settings empty_link_settings = {0}; - DC_LOGGER_INIT(link->ctx->logger); - -+ - /* deallocate_mst_payload is called before disable link. When mode or - * disable/enable monitor, new stream is created which is not in link - * stream[] yet. For this, payload is not allocated yet, so de-alloc -@@ -4014,7 +4017,7 @@ static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx) - &empty_link_settings, - avg_time_slots_per_mtp); - -- if (mst_mode) { -+ if (mst_mode || update_drm_mst_state) { - /* when link is in mst mode, reply on mst manager to remove - * payload - */ -@@ -4077,11 +4080,18 @@ static enum dc_status deallocate_mst_payload(struct pipe_ctx *pipe_ctx) - stream->ctx, - stream); - -+ if (!update_drm_mst_state) -+ dm_helpers_dp_mst_send_payload_allocation( -+ stream->ctx, -+ stream, -+ false); -+ } -+ -+ if (update_drm_mst_state) - dm_helpers_dp_mst_send_payload_allocation( - stream->ctx, - stream, - false); -- } - - return DC_OK; - } --- -2.39.1 - diff --git a/0007-drm-display-dp_mst-Correct-the-kref-of-port.patch b/0007-drm-display-dp_mst-Correct-the-kref-of-port.patch deleted file mode 100644 index f41c78342a4e..000000000000 --- a/0007-drm-display-dp_mst-Correct-the-kref-of-port.patch +++ /dev/null @@ -1,44 +0,0 @@ -From cb872cf86fe3ade981c51530cf0422472a1c55fe Mon Sep 17 00:00:00 2001 -From: Wayne Lin <Wayne.Lin@amd.com> -Date: Wed, 28 Dec 2022 14:50:43 +0800 -Subject: [PATCH 7/8] drm/display/dp_mst: Correct the kref of port. - -[why & how] -We still need to refer to port while removing payload at commit_tail. -we should keep the kref till then to release. - -Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2171 -Signed-off-by: Wayne Lin <Wayne.Lin@amd.com> -Signed-off-by: Harry Wentland <harry.wentland@amd.com> -Fixes: 4d07b0bc4034 ("drm/display/dp_mst: Move all payload info into the atomic state") -Cc: stable@vger.kernel.org # 6.1 -Acked-by: Harry Wentland <harry.wentland@amd.com> ---- - drivers/gpu/drm/display/drm_dp_mst_topology.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c -index 51a46689cda7..4ca37261584a 100644 ---- a/drivers/gpu/drm/display/drm_dp_mst_topology.c -+++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c -@@ -3372,6 +3372,9 @@ void drm_dp_remove_payload(struct drm_dp_mst_topology_mgr *mgr, - - mgr->payload_count--; - mgr->next_start_slot -= payload->time_slots; -+ -+ if (payload->delete) -+ drm_dp_mst_put_port_malloc(payload->port); - } - EXPORT_SYMBOL(drm_dp_remove_payload); - -@@ -4327,7 +4330,6 @@ int drm_dp_atomic_release_time_slots(struct drm_atomic_state *state, - - drm_dbg_atomic(mgr->dev, "[MST PORT:%p] TU %d -> 0\n", port, payload->time_slots); - if (!payload->delete) { -- drm_dp_mst_put_port_malloc(port); - payload->pbn = 0; - payload->delete = true; - topology_state->payload_mask &= ~BIT(payload->vcpi - 1); --- -2.39.1 - @@ -68,7 +68,7 @@ _subarch= ### IMPORTANT: Do no edit below this line unless you know what you're doing pkgbase=linux-ck -pkgver=6.1.8 +pkgver=6.1.9 pkgrel=1 arch=(x86_64) url="https://wiki.archlinux.org/index.php/Linux-ck" @@ -91,29 +91,17 @@ source=( "more-uarches-$_gcc_more_v.tar.gz::https://github.com/graysky2/kernel_compiler_patch/archive/$_gcc_more_v.tar.gz" "ck-hrtimer-$_commit.tar.gz::https://github.com/graysky2/linux-patches/archive/$_commit.tar.gz" 0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch - 0002-Revert-drm-i915-improve-the-catch-all-evict-to-handl.patch - 0003-drm-i915-improve-the-catch-all-evict-to-handle-lock-.patch - 0004-drm-amdgpu-display-mst-Fix-mst_state-pbn_div-and-slo.patch - 0005-drm-amdgpu-display-mst-limit-payload-to-be-updated-o.patch - 0006-drm-amdgpu-display-mst-update-mst_mgr-relevant-varia.patch - 0007-drm-display-dp_mst-Correct-the-kref-of-port.patch ) validpgpkeys=( 'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds '647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman ) -sha256sums=('b60bb53ab8ba370a270454b11e93d41af29126fc72bd6ede517673e2e57b816d' +sha256sums=('d60cf185693c386e7acd9f3eb3a94ae30ffbfee0a9447a20e83711e0bdf5922b' 'SKIP' '1efa33aea067fa920880ef7fef3ec82f8d4cde21213eda34ac6534ca6879fca0' 'f1d586e111932890ad5e0df15d092fb9b3f87bae4ea17812aae9b0ec98fe2db0' '6d3b9cb4639c1c5eb4e2697aed0dbffa5b4a37d63a0861dec8315dd052723e0e' - 'dd0a155f8be7face604741716e5ea1ccd47c7988d4db4476f9736def57a6ae86' - 'b734f0f038647618617226794298b1cc7f6928dd43d46f056486a7d664fff3e0' - 'b725cde6ef68dcb2fe59a1e8646938d95d25a7292910dceef1adaeae229749e6' - '1aaa3c58e4129804eb704fbb66e1fe9a18d37059516f4153bb375a406a3c373a' - '6448060153217445d35f0f2191424acac53defe7a67f08cb7f7347c141bd535e' - 'a3c9ed15a33b7e7f1f589e6b0b00482b78aa7a0044940e4e3f87ad542db9308e' - '28d3e5daa705da23bdafc916695bc50cc8f65655c8965fb6d007d67dfa6cb52f') + 'a730917aa1ab33e79c094b69c3eb3ce080e6f9f4cb7a5b64c3e6b9ef0c53e631') prepare() { cd linux-${pkgver} |