aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3360-drm-amdkfd-Limit-queue-number-per-process-and-device.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3360-drm-amdkfd-Limit-queue-number-per-process-and-device.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3360-drm-amdkfd-Limit-queue-number-per-process-and-device.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3360-drm-amdkfd-Limit-queue-number-per-process-and-device.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3360-drm-amdkfd-Limit-queue-number-per-process-and-device.patch
new file mode 100644
index 00000000..2e25f4f9
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3360-drm-amdkfd-Limit-queue-number-per-process-and-device.patch
@@ -0,0 +1,48 @@
+From 9962bcf9bfc58621c7928906ff529ff3a22c16ec Mon Sep 17 00:00:00 2001
+From: Felix Kuehling <Felix.Kuehling@amd.com>
+Date: Wed, 27 Sep 2017 00:09:55 -0400
+Subject: [PATCH 3360/4131] drm/amdkfd: Limit queue number per process and
+ device to 127
+
+HWS uses bit 7 in the queue number of the map process packet for an
+undocumented feature. Therefore the queue number per process and
+device must be 127 or less.
+
+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>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+index 492d69a..f9d272c 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+@@ -150,6 +150,7 @@ int pqm_create_queue(struct process_queue_manager *pqm,
+ struct process_queue_node *pqn;
+ struct kernel_queue *kq;
+ enum kfd_queue_type type = properties->type;
++ unsigned int max_queues = 127; /* HWS limit */
+
+ q = NULL;
+ kq = NULL;
+@@ -166,10 +167,11 @@ int pqm_create_queue(struct process_queue_manager *pqm,
+ * If we are just about to create DIQ, the is_debug flag is not set yet
+ * Hence we also check the type as well
+ */
+- if ((pdd->qpd.is_debug) || (type == KFD_QUEUE_TYPE_DIQ)) {
+- if (pdd->qpd.queue_count >= dev->device_info->max_no_of_hqd/2)
+- return -ENOSPC;
+- }
++ if ((pdd->qpd.is_debug) || (type == KFD_QUEUE_TYPE_DIQ))
++ max_queues = dev->device_info->max_no_of_hqd/2;
++
++ if (pdd->qpd.queue_count >= max_queues)
++ return -ENOSPC;
+
+ retval = find_available_queue_slot(pqm, qid);
+ if (retval != 0)
+--
+2.7.4
+