mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-11 12:44:49 -04:00
drm/xe/bo: handle PL_TT -> PL_TT
When moving between PL_VRAM <-> PL_SYSTEM we have to have use PL_TT in the middle as a temporary resource for the actual copy. In some GL workloads it can be seen that once the resource has been moved to the PL_TT we might have to bail out of the ttm_bo_validate(), before finishing the final hop. If this happens the resource is left as TTM_PL_FLAG_TEMPORARY, and when the ttm_bo_validate() is restarted the current placement is always seen as incompatible, requiring us to complete the move. However if the BO allows PL_TT as a possible placement we can end up attempting a PL_TT -> PL_TT move (like when running out of VRAM) which leads to explosions in xe_bo_move(), like triggering the XE_BUG_ON(!tile). Going from TTM_PL_FLAG_TEMPORARY with PL_TT -> PL_VRAM should already work as-is, so it looks like we only need to worry about PL_TT -> PL_TT and it looks like we can just treat it as a dummy move, since no real move is needed. Reported-by: José Roberto de Souza <jose.souza@intel.com> Signed-off-by: Matthew Auld <matthew.auld@intel.com> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com> Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
committed by
Rodrigo Vivi
parent
7ba4c5f027
commit
8489f30e0c
@@ -603,6 +603,16 @@ static int xe_bo_move(struct ttm_buffer_object *ttm_bo, bool evict,
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Failed multi-hop where the old_mem is still marked as
|
||||
* TTM_PL_FLAG_TEMPORARY, should just be a dummy move.
|
||||
*/
|
||||
if (old_mem->mem_type == XE_PL_TT &&
|
||||
new_mem->mem_type == XE_PL_TT) {
|
||||
ttm_bo_move_null(ttm_bo, new_mem);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!move_lacks_source && !xe_bo_is_pinned(bo)) {
|
||||
ret = xe_bo_move_notify(bo, ctx);
|
||||
if (ret)
|
||||
|
||||
Reference in New Issue
Block a user