diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3482-drm-amdgpu-cache-the-fence-to-wait-for-a-VMID.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3482-drm-amdgpu-cache-the-fence-to-wait-for-a-VMID.patch | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3482-drm-amdgpu-cache-the-fence-to-wait-for-a-VMID.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3482-drm-amdgpu-cache-the-fence-to-wait-for-a-VMID.patch new file mode 100644 index 00000000..1852102b --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3482-drm-amdgpu-cache-the-fence-to-wait-for-a-VMID.patch @@ -0,0 +1,74 @@ +From a62a2739349672aa61cad5e7a6795283e463f528 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Wed, 31 Jan 2018 16:03:19 +0100 +Subject: [PATCH 3482/4131] drm/amdgpu: cache the fence to wait for a VMID +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Beneficial when a lot of processes are waiting for VMIDs. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Chunming Zhou <david1.zhou@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 7 +++++-- + drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 3 +++ + drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 1 + + 3 files changed, 9 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c +index e4b72d1..1145583 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c +@@ -209,6 +209,9 @@ static int amdgpu_vmid_grab_idle(struct amdgpu_vm *vm, + unsigned i; + int r; + ++ if (ring->vmid_wait && !dma_fence_is_signaled(ring->vmid_wait)) ++ return amdgpu_sync_fence(adev, sync, ring->vmid_wait, false); ++ + fences = kmalloc_array(sizeof(void *), id_mgr->num_ids, GFP_KERNEL); + if (!fences) + return -ENOMEM; +@@ -243,9 +246,9 @@ static int amdgpu_vmid_grab_idle(struct amdgpu_vm *vm, + } + + r = amdgpu_sync_fence(adev, sync, &array->base, false); +- dma_fence_put(&array->base); ++ dma_fence_put(ring->vmid_wait); ++ ring->vmid_wait = &array->base; + return r; +- + } + kfree(fences); + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +index 13044e6..e223b0f 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +@@ -360,6 +360,9 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring) + + amdgpu_debugfs_ring_fini(ring); + ++ dma_fence_put(ring->vmid_wait); ++ ring->vmid_wait = NULL; ++ + ring->adev->rings[ring->idx] = NULL; + } + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +index 81b71ef..4ea2f15 100755 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +@@ -198,6 +198,7 @@ struct amdgpu_ring { + u64 cond_exe_gpu_addr; + volatile u32 *cond_exe_cpu_addr; + unsigned vm_inv_eng; ++ struct dma_fence *vmid_wait; + bool has_compute_vm_bug; + + atomic_t num_jobs[DRM_SCHED_PRIORITY_MAX]; +-- +2.7.4 + |