diff options
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.patch | 100 |
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 + |