Patch "drm/i915: Attempt to get pages without eviction first" has been added to the 6.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    drm/i915: Attempt to get pages without eviction first

to the 6.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     drm-i915-attempt-to-get-pages-without-eviction-first.patch
and it can be found in the queue-6.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b4b9833f20a14942b9566e5e1730a8567c9938db
Author: David Gow <david@xxxxxxxxxxxx>
Date:   Sun Aug 4 17:18:48 2024 +0800

    drm/i915: Attempt to get pages without eviction first
    
    [ Upstream commit 787db3bb6ed5cee56fc97fecdd61517d89763f0a ]
    
    In commit a78a8da51b36 ("drm/ttm: replace busy placement with flags v6"),
    __i915_ttm_get_pages was updated to use flags instead of the separate
    'busy' placement list. However, the behaviour was subtly changed.
    Originally, the function would attempt to use the preferred placement
    without eviction, and give an opportunity to restart the operation
    before falling back to allowing eviction.
    
    This was unintentionally changed, as the preferred placement was not
    given the TTM_PL_FLAG_DESIRED flag, and so eviction could be triggered
    in that first pass. This caused thrashing, and a significant performance
    regression on DG2 systems with small BAR. For example, Minecraft and
    Team Fortress 2 would drop to single-digit framerates.
    
    Restore the original behaviour by marking the initial placement as
    desired on that first attempt. Also, rework this to use a separate
    struct ttm_palcement, as the individual placements are marked 'const',
    so hot-patching the flags is even more dodgy than before.
    
    Thanks to Justin Brewer for bisecting this.
    
    Fixes: a78a8da51b36 ("drm/ttm: replace busy placement with flags v6")
    Link: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11255
    Signed-off-by: David Gow <david@xxxxxxxxxxxx>
    Reviewed-by: Jonathan Cavitt <jonathan.cavitt@xxxxxxxxx>
    Reviewed-by: Andi Shyti <andi.shyti@xxxxxxxxxxxxxxx>
    Signed-off-by: Andi Shyti <andi.shyti@xxxxxxxxxxxxxxx>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240804091851.122186-3-david@xxxxxxxxxxxx
    (cherry picked from commit 92653f2a572505adaf7f13f695c1907e71a1dc84)
    Signed-off-by: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
index fb848fd8ba15a..5c72462d1f57e 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
@@ -778,13 +778,16 @@ static int __i915_ttm_get_pages(struct drm_i915_gem_object *obj,
 		.interruptible = true,
 		.no_wait_gpu = false,
 	};
-	int real_num_busy;
+	struct ttm_placement initial_placement;
+	struct ttm_place initial_place;
 	int ret;
 
 	/* First try only the requested placement. No eviction. */
-	real_num_busy = placement->num_placement;
-	placement->num_placement = 1;
-	ret = ttm_bo_validate(bo, placement, &ctx);
+	initial_placement.num_placement = 1;
+	memcpy(&initial_place, placement->placement, sizeof(struct ttm_place));
+	initial_place.flags |= TTM_PL_FLAG_DESIRED;
+	initial_placement.placement = &initial_place;
+	ret = ttm_bo_validate(bo, &initial_placement, &ctx);
 	if (ret) {
 		ret = i915_ttm_err_to_gem(ret);
 		/*
@@ -799,7 +802,6 @@ static int __i915_ttm_get_pages(struct drm_i915_gem_object *obj,
 		 * If the initial attempt fails, allow all accepted placements,
 		 * evicting if necessary.
 		 */
-		placement->num_placement = real_num_busy;
 		ret = ttm_bo_validate(bo, placement, &ctx);
 		if (ret)
 			return i915_ttm_err_to_gem(ret);




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux