aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1637-drm-amdkfd-Use-GFP_NOIO-with-reclaim-safe-locks.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1637-drm-amdkfd-Use-GFP_NOIO-with-reclaim-safe-locks.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1637-drm-amdkfd-Use-GFP_NOIO-with-reclaim-safe-locks.patch82
1 files changed, 82 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1637-drm-amdkfd-Use-GFP_NOIO-with-reclaim-safe-locks.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1637-drm-amdkfd-Use-GFP_NOIO-with-reclaim-safe-locks.patch
new file mode 100644
index 00000000..e324c285
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1637-drm-amdkfd-Use-GFP_NOIO-with-reclaim-safe-locks.patch
@@ -0,0 +1,82 @@
+From 65252d79ddfcc048b7754dc01894b75d553bbc45 Mon Sep 17 00:00:00 2001
+From: Felix Kuehling <Felix.Kuehling@amd.com>
+Date: Tue, 21 Mar 2017 11:31:28 -0400
+Subject: [PATCH 1637/4131] drm/amdkfd: Use GFP_NOIO with reclaim-safe locks
+
+Locks that are held in reclaim-fs context (in MMU notifiers invoked
+under memory pressure) must not themselves cause memory reclaims
+while held to prevent deadlocks. Use GFP_NOIO to ensure this.
+
+Change-Id: Ie922d687c93f7261d2c5f4a5dad2a2e1ea7e6dc9
+Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_device.c | 2 +-
+ drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c | 2 +-
+ drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c | 4 ++--
+ drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c | 2 +-
+ 4 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+index 32ada3f..1d10eed 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+@@ -1029,7 +1029,7 @@ int kfd_gtt_sa_allocate(struct kfd_dev *kfd, unsigned int size,
+ if (size > kfd->gtt_sa_num_of_chunks * kfd->gtt_sa_chunk_size)
+ return -ENOMEM;
+
+- *mem_obj = kzalloc(sizeof(struct kfd_mem_obj), GFP_KERNEL);
++ *mem_obj = kzalloc(sizeof(struct kfd_mem_obj), GFP_NOIO);
+ if ((*mem_obj) == NULL)
+ return -ENOMEM;
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
+index a586c2c..27e62c3 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
+@@ -523,7 +523,7 @@ struct mqd_manager *mqd_manager_init_cik(enum KFD_MQD_TYPE type,
+
+ pr_debug("kfd: In func %s\n", __func__);
+
+- mqd = kzalloc(sizeof(struct mqd_manager), GFP_KERNEL);
++ mqd = kzalloc(sizeof(struct mqd_manager), GFP_NOIO);
+ if (!mqd)
+ return NULL;
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c
+index c80691e..d185637 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_v9.c
+@@ -106,7 +106,7 @@ static int init_mqd(struct mqd_manager *mm, void **mqd,
+ * instead of sub-allocation function.
+ */
+ if (kfd->cwsr_enabled && (q->type == KFD_QUEUE_TYPE_COMPUTE)) {
+- *mqd_mem_obj = kzalloc(sizeof(struct kfd_mem_obj), GFP_KERNEL);
++ *mqd_mem_obj = kzalloc(sizeof(struct kfd_mem_obj), GFP_NOIO);
+ retval = kfd->kfd2kgd->init_gtt_mem_allocation(kfd->kgd,
+ ALIGN(q->ctl_stack_size, PAGE_SIZE) +
+ ALIGN(sizeof(struct v9_mqd), PAGE_SIZE),
+@@ -458,7 +458,7 @@ struct mqd_manager *mqd_manager_init_v9(enum KFD_MQD_TYPE type,
+
+ pr_debug("kfd: In func %s\n", __func__);
+
+- mqd = kzalloc(sizeof(struct mqd_manager), GFP_KERNEL);
++ mqd = kzalloc(sizeof(struct mqd_manager), GFP_NOIO);
+ if (!mqd)
+ return NULL;
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c
+index 563d37b..58e95d3 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c
+@@ -484,7 +484,7 @@ struct mqd_manager *mqd_manager_init_vi(enum KFD_MQD_TYPE type,
+
+ pr_debug("kfd: In func %s\n", __func__);
+
+- mqd = kzalloc(sizeof(struct mqd_manager), GFP_KERNEL);
++ mqd = kzalloc(sizeof(struct mqd_manager), GFP_NOIO);
+ if (!mqd)
+ return NULL;
+
+--
+2.7.4
+