[PATCH 1/3] drm/amdgpu: track if a PD needs an update
zhoucm1
david1.zhou at amd.com
Fri Jul 14 02:13:16 UTC 2017
'if (parent->entries[pt_idx].addr == pt)' is good enough for condition
of need_update, adding previous Felix's optimization patch, then the
whole picture looks better than this one, IIRC.
Regards,
David Zhou
On 2017年07月13日 21:25, Christian König wrote:
> From: Christian König <christian.koenig at amd.com>
>
> That should reduce our command submission overhead quite a bit.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 7 ++++++-
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 1 +
> 2 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index 55d1c7f..3f5863e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -173,6 +173,7 @@ static int amdgpu_vm_validate_level(struct amdgpu_vm_pt *parent,
> if (!parent->entries)
> return 0;
>
> + parent->needs_update = true;
> for (i = 0; i <= parent->last_entry_used; ++i) {
> struct amdgpu_vm_pt *entry = &parent->entries[i];
>
> @@ -351,6 +352,7 @@ static int amdgpu_vm_alloc_levels(struct amdgpu_device *adev,
>
> entry->bo = pt;
> entry->addr = 0;
> + parent->needs_update = true;
> }
>
> if (level < adev->vm_manager.num_level) {
> @@ -361,6 +363,8 @@ static int amdgpu_vm_alloc_levels(struct amdgpu_device *adev,
> sub_eaddr, level);
> if (r)
> return r;
> +
> + parent->needs_update |= entry->needs_update;
> }
> }
>
> @@ -1050,7 +1054,7 @@ static int amdgpu_vm_update_level(struct amdgpu_device *adev,
>
> int r;
>
> - if (!parent->entries)
> + if (!parent->entries || !parent->needs_update)
> return 0;
>
> memset(¶ms, 0, sizeof(params));
> @@ -1196,6 +1200,7 @@ static int amdgpu_vm_update_level(struct amdgpu_device *adev,
> return r;
> }
>
> + parent->needs_update = false;
> return 0;
>
> error_free:
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> index 3441ec5..c3dfd3e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> @@ -102,6 +102,7 @@ struct amdgpu_vm_pt {
> /* array of page tables, one for each directory entry */
> struct amdgpu_vm_pt *entries;
> unsigned last_entry_used;
> + bool needs_update;
> };
>
> struct amdgpu_vm {
More information about the amd-gfx
mailing list