diff --git a/hosts/framenix/0001-drm-buddy-Improve-alloc_range-error-handling-routine.patch b/hosts/framenix/0001-drm-buddy-Improve-alloc_range-error-handling-routine.patch new file mode 100644 index 0000000..cc0d4a0 --- /dev/null +++ b/hosts/framenix/0001-drm-buddy-Improve-alloc_range-error-handling-routine.patch @@ -0,0 +1,47 @@ +From 6e77e6de7582f35138fa1c7523268602ecb2e0a0 Mon Sep 17 00:00:00 2001 +From: Arunpravin Paneer Selvam +Date: Tue, 6 Feb 2024 10:39:24 -0800 +Subject: [PATCH] drm/buddy: Improve alloc_range error handling routine + +If alloc_range() couldn't allocate the requuired size, +return -ENOSPC. + +Signed-off-by: Arunpravin Paneer Selvam +--- + drivers/gpu/drm/drm_buddy.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/drm_buddy.c b/drivers/gpu/drm/drm_buddy.c +index f57e6d74fb0e..d5aba6392da0 100644 +--- a/drivers/gpu/drm/drm_buddy.c ++++ b/drivers/gpu/drm/drm_buddy.c +@@ -483,9 +483,9 @@ static int __alloc_range(struct drm_buddy *mm, + struct list_head *blocks, + u64 *total_allocated_on_err) + { ++ u64 total_allocated = 0, allocated_size = 0; + struct drm_buddy_block *block; + struct drm_buddy_block *buddy; +- u64 total_allocated = 0; + LIST_HEAD(allocated); + u64 end; + int err; +@@ -539,6 +539,15 @@ static int __alloc_range(struct drm_buddy *mm, + } while (1); + + list_splice_tail(&allocated, blocks); ++ ++ list_for_each_entry(block, blocks, link) ++ allocated_size += drm_buddy_block_size(mm, block); ++ ++ if (allocated_size < size) { ++ err = -ENOSPC; ++ goto err_free; ++ } ++ + return 0; + + err_undo: +-- +2.25.1 + diff --git a/hosts/framenix/default.nix b/hosts/framenix/default.nix index 20b6776..1e40ffd 100644 --- a/hosts/framenix/default.nix +++ b/hosts/framenix/default.nix @@ -33,31 +33,9 @@ in # revert some commits that introduced the clourful graphics artefacts flickering, # at least that's the current working hypothesis in https://gitlab.freedesktop.org/drm/amd/-/issues/3097 boot.kernelPatches = [ - {name = "revert 9ae587f850a6702428273fcf4a2a9b392349b2a3"; - patch = (pkgs.fetchpatch { - url = "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=9ae587f850a6702428273fcf4a2a9b392349b2a3"; - hash = "sha256-5Uu8zxRSQuqE8oymjwPMt/ylsItpkQVDhbrOSMj8g3I="; - revert = true; - });} - {name = "revert 2eb412aa25ed2bf59f5ad5f7a09787d182d67934"; - patch = (pkgs.fetchpatch { - url = "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=2eb412aa25ed2bf59f5ad5f7a09787d182d67934"; - hash = "sha256-VtsH6bmwaLxPZ+uXvVE6qVWD2/aIKf9GLuMTNKq6d8M="; - revert = true; - });} - {name = "revert 0a1844bf0b532d84324453374ad6845f64066c28"; - patch = (pkgs.fetchpatch { - url = "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=0a1844bf0b532d84324453374ad6845f64066c28"; - hash = "sha256-Zd2pcYiOmuuzcc7THNtJW/YTjPyzO7HmQYKJNzy9YPw="; - revert = true; - }); - # alternatively, 8569c3154538 can be reverted as well - extraStructuredConfig = with lib.kernel; { - DRM_I915 = no; - DRM_I915_GVT = lib.mkForce unset; - DRM_I915_GVT_KVMGT = lib.mkForce unset; - }; - } + {name = "patch attempt from https://gitlab.freedesktop.org/drm/amd/-/issues/3097#note_2271482"; + patch = ./0001-drm-buddy-Improve-alloc_range-error-handling-routine.patch; + } ]; # temporary workaround for white flickering graphics artefacts