reserved vmid is independent on id_mgr
And that is exactly the reason why I want to have that here.
If we don't fix this reserving a VMID would otherwise give the process
an unfair advantage while scheduling jobs.
Regards,
Christian.
Am 01.02.2018 um 05:42 schrieb Chunming Zhou:
NAK, reserved vmid is independent on id_mgr, which is removed from id
mgr when process allocates reserved vmid.
Regards,
David Zhou
On 2018年01月31日 23:47, Christian König wrote:
To guarantee fairness between processes grab reserved VMID only when
there is an idle one.
Signed-off-by: Christian König <christian.koe...@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
index c13cf7e79b2e..7a3d0de7425d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
@@ -268,11 +268,6 @@ int amdgpu_vmid_grab(struct amdgpu_vm *vm,
struct amdgpu_ring *ring,
int r = 0;
mutex_lock(&id_mgr->lock);
- if (vm->reserved_vmid[vmhub]) {
- r = amdgpu_vmid_grab_reserved_locked(vm, ring, sync, fence,
job);
- mutex_unlock(&id_mgr->lock);
- return r;
- }
fences = kmalloc_array(sizeof(void *), id_mgr->num_ids,
GFP_KERNEL);
if (!fences) {
mutex_unlock(&id_mgr->lock);
@@ -319,6 +314,13 @@ int amdgpu_vmid_grab(struct amdgpu_vm *vm,
struct amdgpu_ring *ring,
}
kfree(fences);
+ if (vm->reserved_vmid[vmhub]) {
+ r = amdgpu_vmid_grab_reserved_locked(vm, ring, sync,
+ fence, job);
+ mutex_unlock(&id_mgr->lock);
+ return r;
+ }
+
job->vm_needs_flush = vm->use_cpu_for_update;
/* Check if we can use a VMID already assigned to this VM */
list_for_each_entry_reverse(id, &id_mgr->ids_lru, list) {
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx