diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0390-drm-amdgpu-prepare-job-before-push-to-sw-queue-for-p.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0390-drm-amdgpu-prepare-job-before-push-to-sw-queue-for-p.patch | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0390-drm-amdgpu-prepare-job-before-push-to-sw-queue-for-p.patch b/common/recipes-kernel/linux/files/0390-drm-amdgpu-prepare-job-before-push-to-sw-queue-for-p.patch new file mode 100644 index 00000000..f8f57c80 --- /dev/null +++ b/common/recipes-kernel/linux/files/0390-drm-amdgpu-prepare-job-before-push-to-sw-queue-for-p.patch @@ -0,0 +1,82 @@ +From 4274f5d45cf11f88d7380702a7147b70553ddd6e Mon Sep 17 00:00:00 2001 +From: Chunming Zhou <david1.zhou@amd.com> +Date: Tue, 21 Jul 2015 16:04:39 +0800 +Subject: [PATCH 0390/1050] drm/amdgpu: prepare job before push to sw queue for + pte ring + +user mode will still use pte ring as a normal ring. +if the prepare job generates another command(update pte) on its ring in scheduler, +then will kill scheduler which is going to waiting later job but pending running job. + +Signed-off-by: Chunming Zhou <david1.zhou@amd.com> +Acked-by: Christian K?nig <christian.koenig@amd.com> +Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +- + drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 1 + + drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 1 + + drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 1 + + 5 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +index 127867c..79e81f3 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -902,6 +902,7 @@ struct amdgpu_ring { + struct amdgpu_ctx *current_ctx; + enum amdgpu_ring_type type; + char name[16]; ++ bool is_pte_ring; + }; + + /* +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +index 5f24038..9ff4d27 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +@@ -909,7 +909,7 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) + amdgpu_cs_parser_get_ring(adev, parser); + parser->uf.sequence = atomic64_inc_return( + &parser->ctx->rings[ring->idx].c_entity.last_queued_v_seq); +- if ((parser->bo_list && parser->bo_list->has_userptr)) { ++ if (ring->is_pte_ring || (parser->bo_list && parser->bo_list->has_userptr)) { + r = amdgpu_cs_parser_prepare_job(parser); + if (r) + goto out; +diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c +index 15df46c..dd3da7b 100644 +--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c ++++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c +@@ -1404,5 +1404,6 @@ static void cik_sdma_set_vm_pte_funcs(struct amdgpu_device *adev) + if (adev->vm_manager.vm_pte_funcs == NULL) { + adev->vm_manager.vm_pte_funcs = &cik_sdma_vm_pte_funcs; + adev->vm_manager.vm_pte_funcs_ring = &adev->sdma[0].ring; ++ adev->vm_manager.vm_pte_funcs_ring->is_pte_ring = true; + } + } +diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c +index a988dfb..8b7e243 100644 +--- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c ++++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c +@@ -1415,5 +1415,6 @@ static void sdma_v2_4_set_vm_pte_funcs(struct amdgpu_device *adev) + if (adev->vm_manager.vm_pte_funcs == NULL) { + adev->vm_manager.vm_pte_funcs = &sdma_v2_4_vm_pte_funcs; + adev->vm_manager.vm_pte_funcs_ring = &adev->sdma[0].ring; ++ adev->vm_manager.vm_pte_funcs_ring->is_pte_ring = true; + } + } +diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +index 8f4aac2..4b5d769 100644 +--- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +@@ -1540,5 +1540,6 @@ static void sdma_v3_0_set_vm_pte_funcs(struct amdgpu_device *adev) + if (adev->vm_manager.vm_pte_funcs == NULL) { + adev->vm_manager.vm_pte_funcs = &sdma_v3_0_vm_pte_funcs; + adev->vm_manager.vm_pte_funcs_ring = &adev->sdma[0].ring; ++ adev->vm_manager.vm_pte_funcs_ring->is_pte_ring = true; + } + } +-- +1.9.1 + |