diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0693-drm-amdgpu-keep-the-owner-for-VMIDs.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0693-drm-amdgpu-keep-the-owner-for-VMIDs.patch | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/common/recipes-kernel/linux/files/0693-drm-amdgpu-keep-the-owner-for-VMIDs.patch b/common/recipes-kernel/linux/files/0693-drm-amdgpu-keep-the-owner-for-VMIDs.patch deleted file mode 100644 index 9383d80b..00000000 --- a/common/recipes-kernel/linux/files/0693-drm-amdgpu-keep-the-owner-for-VMIDs.patch +++ /dev/null @@ -1,131 +0,0 @@ -From 1c16c0a7b26c6c905dc79c4194135ca2f360f0f5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Sat, 14 Nov 2015 21:31:40 +0100 -Subject: [PATCH 0693/1565] drm/amdgpu: keep the owner for VMIDs -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -We don't need the last VM use any more, keep the owner directly. - -Signed-off-by: Christian König <christian.koenig@amd.com> -Reviewed-by: Chunming Zhou <davdi1.zhou@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu.h | 8 +++++--- - drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 33 +++++++++++++++++++-------------- - 2 files changed, 24 insertions(+), 17 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index beb7485..a569262 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -925,8 +925,6 @@ struct amdgpu_vm_id { - uint64_t pd_gpu_addr; - /* last flushed PD/PT update */ - struct fence *flushed_updates; -- /* last use of vmid */ -- struct fence *last_id_use; - }; - - struct amdgpu_vm { -@@ -959,7 +957,11 @@ struct amdgpu_vm { - }; - - struct amdgpu_vm_manager { -- struct fence *active[AMDGPU_NUM_VM]; -+ struct { -+ struct fence *active; -+ atomic_long_t owner; -+ } ids[AMDGPU_NUM_VM]; -+ - uint32_t max_pfn; - /* number of VMIDs */ - unsigned nvm; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -index 6bb209b..0bdbb24 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -@@ -143,10 +143,15 @@ int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct amdgpu_ring *ring, - unsigned i; - - /* check if the id is still valid */ -- if (vm_id->id && vm_id->last_id_use && -- vm_id->last_id_use == adev->vm_manager.active[vm_id->id]) { -- trace_amdgpu_vm_grab_id(vm_id->id, ring->idx); -- return 0; -+ if (vm_id->id) { -+ unsigned id = vm_id->id; -+ long owner; -+ -+ owner = atomic_long_read(&adev->vm_manager.ids[id].owner); -+ if (owner == (long)vm) { -+ trace_amdgpu_vm_grab_id(vm_id->id, ring->idx); -+ return 0; -+ } - } - - /* we definately need to flush */ -@@ -154,7 +159,7 @@ int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct amdgpu_ring *ring, - - /* skip over VMID 0, since it is the system VM */ - for (i = 1; i < adev->vm_manager.nvm; ++i) { -- struct fence *fence = adev->vm_manager.active[i]; -+ struct fence *fence = adev->vm_manager.ids[i].active; - struct amdgpu_ring *fring; - - if (fence == NULL) { -@@ -176,7 +181,7 @@ int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct amdgpu_ring *ring, - if (choices[i]) { - struct fence *fence; - -- fence = adev->vm_manager.active[choices[i]]; -+ fence = adev->vm_manager.ids[choices[i]].active; - vm_id->id = choices[i]; - - trace_amdgpu_vm_grab_id(choices[i], ring->idx); -@@ -246,11 +251,9 @@ void amdgpu_vm_fence(struct amdgpu_device *adev, - struct amdgpu_ring *ring = amdgpu_ring_from_fence(fence); - unsigned vm_id = vm->ids[ring->idx].id; - -- fence_put(adev->vm_manager.active[vm_id]); -- adev->vm_manager.active[vm_id] = fence_get(fence); -- -- fence_put(vm->ids[ring->idx].last_id_use); -- vm->ids[ring->idx].last_id_use = fence_get(fence); -+ fence_put(adev->vm_manager.ids[vm_id].active); -+ adev->vm_manager.ids[vm_id].active = fence_get(fence); -+ atomic_long_set(&adev->vm_manager.ids[vm_id].owner, (long)vm); - } - - /** -@@ -1238,7 +1241,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm) - for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { - vm->ids[i].id = 0; - vm->ids[i].flushed_updates = NULL; -- vm->ids[i].last_id_use = NULL; - } - mutex_init(&vm->mutex); - vm->va = RB_ROOT; -@@ -1312,8 +1314,11 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm) - fence_put(vm->page_directory_fence); - - for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { -+ unsigned id = vm->ids[i].id; -+ -+ atomic_long_cmpxchg(&adev->vm_manager.ids[id].owner, -+ (long)vm, 0); - fence_put(vm->ids[i].flushed_updates); -- fence_put(vm->ids[i].last_id_use); - } - - mutex_destroy(&vm->mutex); -@@ -1331,5 +1336,5 @@ void amdgpu_vm_manager_fini(struct amdgpu_device *adev) - unsigned i; - - for (i = 0; i < AMDGPU_NUM_VM; ++i) -- fence_put(adev->vm_manager.active[i]); -+ fence_put(adev->vm_manager.ids[i].active); - } --- -1.9.1 - |