Skip to contentSkip to conversation

FAILED: patch "[PATCH] drm/ttm: Don't leak a resource on eviction error" failed to apply to 5.15-stable tree

PATCH [email protected] 1 participant 1 message Jul 21, 2023

Subsystems (4)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

To reproduce the conflict and resubmit, you may use the following commands:

git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x e8188c461ee015ba0b9ab2fc82dbd5ebca5a5532
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023072126-altitude-coexist-08f2@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..

Possible dependencies:

e8188c461ee0 ("drm/ttm: Don't leak a resource on eviction error") 8ab3b0663e27 ("drm/ttm: Don't print error message if eviction was interrupted")

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From e8188c461ee015ba0b9ab2fc82dbd5ebca5a5532 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= <[email protected]>
Date: Mon, 26 Jun 2023 11:14:49 +0200
Subject: [PATCH] drm/ttm: Don't leak a resource on eviction error
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

On eviction errors other than -EMULTIHOP we were leaking a resource. Fix.

v2:
- Avoid yet another goto (Andi Shyti)

Fixes 403797925768 ("drm/ttm: Fix multihop assert on eviction.")
Cc Andrey Grodzovsky <[email protected]>
Cc Christian König <[email protected]>
Cc Christian Koenig <[email protected]>
Cc Huang Rui <[email protected]>
Cc <[email protected]> # v5.15+
drivers/gpu/drm/ttm/ttm_bo.c +11 -11
index bd5dae4d1624..d364639a2752 100644
@@ -458,18 +458,18 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo,
 		goto out;
 	}
 
-bounce:
-	ret = ttm_bo_handle_move_mem(bo, evict_mem, true, ctx, &hop);
-	if (ret == -EMULTIHOP) {
+	do {
+		ret = ttm_bo_handle_move_mem(bo, evict_mem, true, ctx, &hop);
+		if (ret != -EMULTIHOP)
+			break;
+
 		ret = ttm_bo_bounce_temp_buffer(bo, &evict_mem, ctx, &hop);
-		if (ret) {
-			if (ret != -ERESTARTSYS && ret != -EINTR)
-				pr_err("Buffer eviction failed\n");
-			ttm_resource_free(bo, &evict_mem);
-			goto out;
-		}
-		/* try and move to final place now. */
-		goto bounce;
+	} while (!ret);
+
+	if (ret) {
+		ttm_resource_free(bo, &evict_mem);
+		if (ret != -ERESTARTSYS && ret != -EINTR)
+			pr_err("Buffer eviction failed\n");
 	}
 out:
 	return ret;