diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/1134-drm-amdkfd-Rectify-the-jiffies-calculation-error-wit.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/1134-drm-amdkfd-Rectify-the-jiffies-calculation-error-wit.patch | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/1134-drm-amdkfd-Rectify-the-jiffies-calculation-error-wit.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/1134-drm-amdkfd-Rectify-the-jiffies-calculation-error-wit.patch new file mode 100644 index 00000000..a26aea3c --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/1134-drm-amdkfd-Rectify-the-jiffies-calculation-error-wit.patch @@ -0,0 +1,59 @@ +From af3e2f025bb1c920925b13958e47e4de17b55fd2 Mon Sep 17 00:00:00 2001 +From: Yong Zhao <yong.zhao@amd.com> +Date: Fri, 13 May 2016 19:43:39 -0400 +Subject: [PATCH 1134/4131] drm/amdkfd: Rectify the jiffies calculation error + with milliseconds + +The timeout in milliseconds should not be regarded as jiffies. This +commit fixed that. + +Meanwhile, the timeout value used for unmapping all the user queues +should not be the same as the timeout used for dequeueing a HQD. + +Change-Id: I930cd37612f6d78faabecdcf29e0b629b315c442 +Signed-off-by: Yong Zhao <yong.zhao@amd.com> +--- + drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 9 ++++++--- + drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 2 +- + 2 files changed, 7 insertions(+), 4 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 72f408b..c5724ba 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +@@ -1060,13 +1060,16 @@ static int create_queue_cpsch(struct device_queue_manager *dqm, struct queue *q, + + int amdkfd_fence_wait_timeout(unsigned int *fence_addr, + unsigned int fence_value, +- unsigned long timeout) ++ unsigned long timeout_ms) + { ++ unsigned long end_jiffies; ++ + BUG_ON(!fence_addr); +- timeout += jiffies; ++ ++ end_jiffies = (timeout_ms * HZ / 1000) + jiffies; + + while (*fence_addr != fence_value) { +- if (time_after(jiffies, timeout)) { ++ if (time_after(jiffies, end_jiffies)) { + pr_err("kfd: qcm fence wait loop timeout expired\n"); + return -ETIME; + } +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h +index 3ec7914..e60f20f 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h +@@ -862,7 +862,7 @@ phys_addr_t kfd_get_process_doorbells(struct kfd_dev *dev, + struct kfd_process *process); + int amdkfd_fence_wait_timeout(unsigned int *fence_addr, + unsigned int fence_value, +- unsigned long timeout); ++ unsigned long timeout_ms); + + /* Events */ + extern const struct kfd_event_interrupt_class event_interrupt_class_cik; +-- +2.7.4 + |