aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/1330-drm-amdkfd-Limit-queue-number-per-process-and-device.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/1330-drm-amdkfd-Limit-queue-number-per-process-and-device.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/1330-drm-amdkfd-Limit-queue-number-per-process-and-device.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/1330-drm-amdkfd-Limit-queue-number-per-process-and-device.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/1330-drm-amdkfd-Limit-queue-number-per-process-and-device.patch
new file mode 100644
index 00000000..44958a45
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/1330-drm-amdkfd-Limit-queue-number-per-process-and-device.patch
@@ -0,0 +1,47 @@
+From 50facc66eb05bd2563116f7de31a4943b38a544d Mon Sep 17 00:00:00 2001
+From: Felix Kuehling <Felix.Kuehling@amd.com>
+Date: Mon, 21 Aug 2017 18:08:45 -0400
+Subject: [PATCH 1330/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.
+
+Change-Id: Id63dbd8cdcc64ffff38e1c24563b479a6e73e006
+Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.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 c96d59a..a87fcab 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+@@ -148,6 +148,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;
+@@ -164,10 +165,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
+