[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