aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3345-drm-amdkfd-Adjust-dequeue-latencies-and-timeouts.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3345-drm-amdkfd-Adjust-dequeue-latencies-and-timeouts.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3345-drm-amdkfd-Adjust-dequeue-latencies-and-timeouts.patch100
1 files changed, 100 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3345-drm-amdkfd-Adjust-dequeue-latencies-and-timeouts.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3345-drm-amdkfd-Adjust-dequeue-latencies-and-timeouts.patch
new file mode 100644
index 00000000..235650a2
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3345-drm-amdkfd-Adjust-dequeue-latencies-and-timeouts.patch
@@ -0,0 +1,100 @@
+From 11e9bd3b65eb425197c417795a9ae5b634136291 Mon Sep 17 00:00:00 2001
+From: Sanjay R Mehta <sanju.mehta@amd.com>
+Date: Wed, 16 May 2018 16:01:15 +0530
+Subject: [PATCH 3345/4131] drm/amdkfd: Adjust dequeue latencies and timeouts
+
+Adjust latencies and timeouts for dequeueing with HWS and consolidate
+them in one place. Make them longer to allow long running waves to
+complete without causing a timeout. The timeout is twice as long as the
+latency plus some buffer to make sure we don't detect a timeout
+prematurely.
+
+Change timeouts for dequeueing HQDs without HWS. KFD_UNMAP_LATENCY is
+more consistent with what the HWS does for user queues.
+
+Signed-off-by: Yong Zhao <yong.zhao@amd.com>
+Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com>
+Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
+Signed-off-by: Sanjay R Mehta <sanju.mehta@amd.com>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 2 +-
+ drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h | 4 +++-
+ drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c | 2 +-
+ drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c | 2 +-
+ drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 3 ---
+ 5 files changed, 6 insertions(+), 7 deletions(-)
+
+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 87961fe..dd60c6e 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+@@ -323,7 +323,7 @@ static int destroy_queue_nocpsch(struct device_queue_manager *dqm,
+
+ retval = mqd->destroy_mqd(mqd, q->mqd,
+ KFD_PREEMPT_TYPE_WAVEFRONT_RESET,
+- QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS,
++ KFD_UNMAP_LATENCY_MS,
+ q->pipe, q->queue);
+
+ if (retval)
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
+index faf820a..99e2305 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
+@@ -29,7 +29,9 @@
+ #include "kfd_priv.h"
+ #include "kfd_mqd_manager.h"
+
+-#define QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS (500)
++#define KFD_UNMAP_LATENCY_MS (4000)
++#define QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS (2 * KFD_UNMAP_LATENCY_MS + 1000)
++
+ #define CIK_VMID_NUM (8)
+ #define KFD_VMID_START_OFFSET (8)
+ #define VMID_PER_DEVICE CIK_VMID_NUM
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
+index 0649dd4..04379a6 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
+@@ -185,7 +185,7 @@ static void uninitialize(struct kernel_queue *kq)
+ kq->mqd->destroy_mqd(kq->mqd,
+ kq->queue->mqd,
+ false,
+- QUEUE_PREEMPT_DEFAULT_TIMEOUT_MS,
++ KFD_UNMAP_LATENCY_MS,
+ kq->queue->pipe,
+ kq->queue->queue);
+ else if (kq->queue->properties.type == KFD_QUEUE_TYPE_DIQ)
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
+index 1d31260..9eda884 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
+@@ -376,7 +376,7 @@ int pm_send_set_resources(struct packet_manager *pm,
+ packet->bitfields2.queue_type =
+ queue_type__mes_set_resources__hsa_interface_queue_hiq;
+ packet->bitfields2.vmid_mask = res->vmid_mask;
+- packet->bitfields2.unmap_latency = KFD_UNMAP_LATENCY;
++ packet->bitfields2.unmap_latency = KFD_UNMAP_LATENCY_MS / 100;
+ packet->bitfields7.oac_mask = res->oac_mask;
+ packet->bitfields8.gds_heap_base = res->gds_heap_base;
+ packet->bitfields8.gds_heap_size = res->gds_heap_size;
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+index 83befe2..1b44b6d 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+@@ -675,11 +675,8 @@ int amdkfd_fence_wait_timeout(unsigned int *fence_addr,
+
+ /* Packet Manager */
+
+-#define KFD_HIQ_TIMEOUT (500)
+-
+ #define KFD_FENCE_COMPLETED (100)
+ #define KFD_FENCE_INIT (10)
+-#define KFD_UNMAP_LATENCY (150)
+
+ struct packet_manager {
+ struct device_queue_manager *dqm;
+--
+2.7.4
+