aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0390-drm-amdgpu-prepare-job-before-push-to-sw-queue-for-p.patch
diff options
context:
space:
mode:
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.patch82
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
+