[PATCH 2/8] drm/amdgpu: drop VMID per ring tracking

Alex Deucher alexdeucher at gmail.com
Tue Apr 11 16:01:49 UTC 2017


On Tue, Apr 11, 2017 at 4:44 AM, Christian König
<deathsimple at vodafone.de> wrote:
> From: Christian König <christian.koenig at amd.com>
>
> David suggested this a long time ago, instead of checking
> each ring just walk over all the VMIDs in reverse LRU order.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> Reviewed-by: Andres Rodriguez <andresx7 at gmail.com>

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 17 +++--------------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h |  3 ---
>  2 files changed, 3 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index 157ae50..de6558b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -463,17 +463,10 @@ int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct amdgpu_ring *ring,
>
>         job->vm_needs_flush = true;
>         /* Check if we can use a VMID already assigned to this VM */
> -       i = ring->idx;
> -       do {
> +       list_for_each_entry_reverse(id, &adev->vm_manager.ids_lru, list) {
>                 struct fence *flushed;
>
> -               id = vm->ids[i++];
> -               if (i == AMDGPU_MAX_RINGS)
> -                       i = 0;
> -
>                 /* Check all the prerequisites to using this VMID */
> -               if (!id)
> -                       continue;
>                 if (amdgpu_vm_had_gpu_reset(adev, id))
>                         continue;
>
> @@ -503,7 +496,6 @@ int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct amdgpu_ring *ring,
>                         goto error;
>
>                 list_move_tail(&id->list, &adev->vm_manager.ids_lru);
> -               vm->ids[ring->idx] = id;
>
>                 job->vm_id = id - adev->vm_manager.ids;
>                 job->vm_needs_flush = false;
> @@ -512,7 +504,7 @@ int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct amdgpu_ring *ring,
>                 mutex_unlock(&adev->vm_manager.lock);
>                 return 0;
>
> -       } while (i != ring->idx);
> +       };
>
>         /* Still no ID to use? Then use the idle one found earlier */
>         id = idle;
> @@ -532,7 +524,6 @@ int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct amdgpu_ring *ring,
>         id->current_gpu_reset_count = atomic_read(&adev->gpu_reset_counter);
>         list_move_tail(&id->list, &adev->vm_manager.ids_lru);
>         atomic64_set(&id->owner, vm->client_id);
> -       vm->ids[ring->idx] = id;
>
>         job->vm_id = id - adev->vm_manager.ids;
>         trace_amdgpu_vm_grab_id(vm, ring->idx, job);
> @@ -2117,10 +2108,8 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
>         unsigned ring_instance;
>         struct amdgpu_ring *ring;
>         struct amd_sched_rq *rq;
> -       int i, r;
> +       int r;
>
> -       for (i = 0; i < AMDGPU_MAX_RINGS; ++i)
> -               vm->ids[i] = NULL;
>         vm->va = RB_ROOT;
>         vm->client_id = atomic64_inc_return(&adev->vm_manager.client_counter);
>         spin_lock_init(&vm->status_lock);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> index 6f158d6..46987b4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
> @@ -114,9 +114,6 @@ struct amdgpu_vm {
>         struct fence            *last_dir_update;
>         uint64_t                last_eviction_counter;
>
> -       /* for id and flush management per ring */
> -       struct amdgpu_vm_id     *ids[AMDGPU_MAX_RINGS];
> -
>         /* protecting freed */
>         spinlock_t              freed_lock;
>
> --
> 2.5.0
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list