mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
drm/amdgpu: Only set bo->moved when the BO was actually moved
The "moved" VM state is a bit unfortunately named, because BOs can end up in this state without being physically moved. While we need to invalidate every mapping when BOs are physically moved, in some other cases like PRT binds/unbinds there is no need to refresh mappings except those affected by the bind. Full invalidation of all BO mappings manifested as severe regressions in PRT bind performance, which this patch fixes. The offending patch is4cdbba5a16("drm/amdgpu: restructure VM state machine v4") in the amd-staging-drm-next tree, although it has not yet propagated anywhere else. Fixes:4cdbba5a16("drm/amdgpu: restructure VM state machine v4") Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/5437 Signed-off-by: Natalie Vock <natalie.vock@gmx.de> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> (cherry picked from commit 0b2fa33b4235991a100dd799c891cf5c242aaed1) Cc: stable@vger.kernel.org
This commit is contained in:
parent
93c8fe6d56
commit
5be7f6720a
|
|
@ -232,7 +232,6 @@ static void amdgpu_vm_bo_moved(struct amdgpu_vm_bo_base *vm_bo)
|
|||
vm_bo->moved = false;
|
||||
list_move(&vm_bo->vm_status, &lists->idle);
|
||||
} else {
|
||||
vm_bo->moved = true;
|
||||
list_move(&vm_bo->vm_status, &lists->moved);
|
||||
}
|
||||
amdgpu_vm_bo_unlock_lists(vm_bo);
|
||||
|
|
@ -608,6 +607,7 @@ int amdgpu_vm_validate(struct amdgpu_device *adev, struct amdgpu_vm *vm,
|
|||
return r;
|
||||
|
||||
vm->update_funcs->map_table(to_amdgpu_bo_vm(bo_base->bo));
|
||||
bo_base->moved = true;
|
||||
amdgpu_vm_bo_moved(bo_base);
|
||||
}
|
||||
|
||||
|
|
@ -625,6 +625,7 @@ int amdgpu_vm_validate(struct amdgpu_device *adev, struct amdgpu_vm *vm,
|
|||
if (r)
|
||||
return r;
|
||||
|
||||
bo_base->moved = true;
|
||||
amdgpu_vm_bo_moved(bo_base);
|
||||
}
|
||||
|
||||
|
|
@ -645,6 +646,7 @@ int amdgpu_vm_validate(struct amdgpu_device *adev, struct amdgpu_vm *vm,
|
|||
if (r)
|
||||
return r;
|
||||
|
||||
bo_base->moved = true;
|
||||
amdgpu_vm_bo_moved(bo_base);
|
||||
|
||||
/* It's a bit inefficient to always jump back to the start, but
|
||||
|
|
@ -2284,6 +2286,7 @@ void amdgpu_vm_bo_invalidate(struct amdgpu_bo *bo, bool evicted)
|
|||
|
||||
if (bo_base->moved)
|
||||
continue;
|
||||
bo_base->moved = true;
|
||||
amdgpu_vm_bo_moved(bo_base);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user