drm/amdgpu: add client id for every vm
authorChunming Zhou <David1.Zhou@amd.com>
Mon, 25 Apr 2016 02:19:13 +0000 (10:19 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 11 May 2016 16:31:14 +0000 (12:31 -0400)
This adds a unique id for each vm client so we can
properly track them.

Signed-off-by: Chunming Zhou <David1.Zhou@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Monk Liu <monk.liu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c

index 113fd4bf9b642442c46f5558a80e8b758440dfca..e72cf4518c300672b72e1a500d47b4bca0ebe5a6 100644 (file)
@@ -363,6 +363,7 @@ struct amdgpu_fence_driver {
 /* some special values for the owner field */
 #define AMDGPU_FENCE_OWNER_UNDEFINED   ((void*)0ul)
 #define AMDGPU_FENCE_OWNER_VM          ((void*)1ul)
+#define AMDGPU_CLIENT_ID_RESERVED       2
 
 #define AMDGPU_FENCE_FLAG_64BIT         (1 << 0)
 #define AMDGPU_FENCE_FLAG_INT           (1 << 1)
@@ -885,6 +886,9 @@ struct amdgpu_vm {
 
        /* Scheduler entity for page table updates */
        struct amd_sched_entity entity;
+
+       /* client id */
+       u64                     client_id;
 };
 
 struct amdgpu_vm_id {
@@ -924,6 +928,8 @@ struct amdgpu_vm_manager {
        struct amdgpu_ring                      *vm_pte_rings[AMDGPU_MAX_RINGS];
        unsigned                                vm_pte_num_rings;
        atomic_t                                vm_pte_next_ring;
+       /* client id counter */
+       atomic64_t                              client_counter;
 };
 
 void amdgpu_vm_manager_init(struct amdgpu_device *adev);
index e06d0661549f8b826f0fbbf7715ed436386f8b4a..275378c46b9f16103367053ecb31011d70df455f 100644 (file)
@@ -1386,6 +1386,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
        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);
        INIT_LIST_HEAD(&vm->invalidated);
        INIT_LIST_HEAD(&vm->cleared);
@@ -1514,6 +1515,7 @@ void amdgpu_vm_manager_init(struct amdgpu_device *adev)
        }
 
        atomic_set(&adev->vm_manager.vm_pte_next_ring, 0);
+       atomic64_set(&adev->vm_manager.client_counter, AMDGPU_CLIENT_ID_RESERVED);
 }
 
 /**