aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/1335-drm-amdkfd-Finetune-the-queue-reset-scenario.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/1335-drm-amdkfd-Finetune-the-queue-reset-scenario.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/1335-drm-amdkfd-Finetune-the-queue-reset-scenario.patch60
1 files changed, 60 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/1335-drm-amdkfd-Finetune-the-queue-reset-scenario.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/1335-drm-amdkfd-Finetune-the-queue-reset-scenario.patch
new file mode 100644
index 00000000..6b47087f
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/1335-drm-amdkfd-Finetune-the-queue-reset-scenario.patch
@@ -0,0 +1,60 @@
+From d115a63a1f084442ce18ba552431ab8b66c2bc2b Mon Sep 17 00:00:00 2001
+From: Yong Zhao <Yong.Zhao@amd.com>
+Date: Thu, 24 Aug 2017 16:36:04 -0400
+Subject: [PATCH 1335/4131] drm/amdkfd: Finetune the queue reset scenario
+
+In case of cswr disabled, when the process terminates or vm fault happens
+for pre gfx9 chips, we choose to reset queues on the device anyway, given
+by-pasid reset does not work well.
+
+Change-Id: I8249f59f13a7778018d678aa3277a1f46bb79581
+Signed-off-by: Yong Zhao <Yong.Zhao@amd.com>
+---
+ drivers/gpu/drm/amd/amdkfd/cik_event_interrupt.c | 10 +++++++++-
+ drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 9 ++++++++-
+ 2 files changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/cik_event_interrupt.c b/drivers/gpu/drm/amd/amdkfd/cik_event_interrupt.c
+index 2b93c32..5f122a1 100644
+--- a/drivers/gpu/drm/amd/amdkfd/cik_event_interrupt.c
++++ b/drivers/gpu/drm/amd/amdkfd/cik_event_interrupt.c
+@@ -97,7 +97,15 @@ static void cik_event_interrupt_wq(struct kfd_dev *dev,
+
+ memset(&info, 0, sizeof(info));
+ dev->kfd2kgd->get_vm_fault_info(dev->kgd, &info);
+- kfd_process_vm_fault(dev->dqm, ihre->pasid, false);
++ /* When CWSR is disabled, we choose to reset the device, which
++ * will reset the queues from other processes on this device.
++ * This is a bug that we accept given by-pasid reset does not
++ * work well.
++ */
++ if (dev->cwsr_enabled)
++ kfd_process_vm_fault(dev->dqm, ihre->pasid, false);
++ else
++ kfd_process_vm_fault(dev->dqm, ihre->pasid, true);
+ if (!info.page_addr && !info.status)
+ return;
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+index 461abb8..2796d9d 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+@@ -1546,7 +1546,14 @@ static int process_termination_cpsch(struct device_queue_manager *dqm,
+ }
+ }
+
+- retval = execute_queues_cpsch(dqm, true, false);
++ /* When CWSR is disabled, we choose to reset the device, which will
++ * reset the queues from other processes on this device. This is
++ * a bug that we accept given by-pasid reset does not work well.
++ */
++ if (dqm->dev->cwsr_enabled)
++ retval = execute_queues_cpsch(dqm, true, false);
++ else
++ retval = execute_queues_cpsch(dqm, true, true);
+
+ if (retval || qpd->reset_wavefronts) {
+ pr_warn("Resetting wave fronts (cpsch) on dev %p\n", dqm->dev);
+--
+2.7.4
+