aboutsummaryrefslogtreecommitdiffstats
path: root/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1134-drm-amdkfd-Rectify-the-jiffies-calculation-error-wit.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1134-drm-amdkfd-Rectify-the-jiffies-calculation-error-wit.patch')
-rw-r--r--meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1134-drm-amdkfd-Rectify-the-jiffies-calculation-error-wit.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1134-drm-amdkfd-Rectify-the-jiffies-calculation-error-wit.patch b/meta-v1000/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/meta-v1000/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
+