drm/amdgpu: Respect placement requirements in amdgpu_gtt_mgr functions

When testing intersection and compatibility, respect
the actual placement requirements. This is a pre-requisite
for ensuring that UVD CS BOs do not cross 256M segments.

Fixes: ded910f368 ("drm/amdgpu: Implement intersect/compatible functions")
Suggested-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit bc06579ca29dee9c245a41b12e39c7bb6938af5d)
Cc: stable@vger.kernel.org
This commit is contained in:
Timur Kristóf 2026-05-25 13:33:17 +02:00 committed by Alex Deucher
parent c1dc4ccb82
commit 8882f8897e

View File

@ -272,7 +272,20 @@ static bool amdgpu_gtt_mgr_intersects(struct ttm_resource_manager *man,
const struct ttm_place *place,
size_t size)
{
return !place->lpfn || amdgpu_gtt_mgr_has_gart_addr(res);
const struct drm_mm_node *const node = &to_ttm_range_mgr_node(res)->mm_nodes[0];
const u32 num_pages = PFN_UP(size);
if (!place->lpfn)
return true;
if (!amdgpu_gtt_mgr_has_gart_addr(res))
return false;
if (place->fpfn >= (node->start + num_pages) ||
(place->lpfn && place->lpfn <= node->start))
return false;
return true;
}
/**
@ -290,7 +303,20 @@ static bool amdgpu_gtt_mgr_compatible(struct ttm_resource_manager *man,
const struct ttm_place *place,
size_t size)
{
return !place->lpfn || amdgpu_gtt_mgr_has_gart_addr(res);
const struct drm_mm_node *const node = &to_ttm_range_mgr_node(res)->mm_nodes[0];
const u32 num_pages = PFN_UP(size);
if (!place->lpfn)
return true;
if (!amdgpu_gtt_mgr_has_gart_addr(res))
return false;
if (node->start < place->fpfn ||
(place->lpfn && (node->start + num_pages) > place->lpfn))
return false;
return true;
}
/**