[PATCH v2 1/1] drm/amdgpu: Update PDEs flush TLB if PTB/PDB moved
Christian König
christian.koenig at amd.com
Thu Jun 2 13:22:16 UTC 2022
Am 02.06.22 um 15:20 schrieb Philip Yang:
> Flush TLBs when existing PDEs are updated because a PTB or PDB moved,
> but avoids unnecessary TLB flushes when new PDBs or PTBs are added to
> the page table, which commonly happens when memory is mapped for the
> first time.
>
> Suggested-by: Christian König <christian.koenig at amd.com>
> Signed-off-by: Philip Yang <Philip.Yang at amd.com>
Reviewed-by: Christian König <christian.koenig at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index 9596c22fded6..1ea204218903 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -737,6 +737,7 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev,
> {
> struct amdgpu_vm_update_params params;
> struct amdgpu_vm_bo_base *entry;
> + bool flush_tlb_needed = false;
> int r, idx;
>
> if (list_empty(&vm->relocated))
> @@ -755,6 +756,9 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev,
> goto error;
>
> list_for_each_entry(entry, &vm->relocated, vm_status) {
> + /* vm_flush_needed after updating moved PDEs */
> + flush_tlb_needed |= entry->moved;
> +
> r = amdgpu_vm_pde_update(¶ms, entry);
> if (r)
> goto error;
> @@ -764,8 +768,8 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev,
> if (r)
> goto error;
>
> - /* vm_flush_needed after updating PDEs */
> - atomic64_inc(&vm->tlb_seq);
> + if (flush_tlb_needed)
> + atomic64_inc(&vm->tlb_seq);
>
> while (!list_empty(&vm->relocated)) {
> entry = list_first_entry(&vm->relocated,
More information about the amd-gfx
mailing list