aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3402-drm-amdkfd-Add-crash-protection-in-debugger-register.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3402-drm-amdkfd-Add-crash-protection-in-debugger-register.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3402-drm-amdkfd-Add-crash-protection-in-debugger-register.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3402-drm-amdkfd-Add-crash-protection-in-debugger-register.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3402-drm-amdkfd-Add-crash-protection-in-debugger-register.patch
new file mode 100644
index 00000000..841358b0
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3402-drm-amdkfd-Add-crash-protection-in-debugger-register.patch
@@ -0,0 +1,61 @@
+From 2a6b2fb169835f1167b46589e28eff764725bd8f Mon Sep 17 00:00:00 2001
+From: Philip Yang <Philip.Yang@amd.com>
+Date: Mon, 27 Nov 2017 18:29:44 -0500
+Subject: [PATCH 3402/4131] drm/amdkfd: Add crash protection in debugger
+ register path
+
+After debugger is registered, the pqm_destroy_queue fails because is_debug
+is true, the queue should not be removed from process_queue_list since
+the count is not reduced.
+
+Test application calls debugger unregister without register debugger, add
+null pointer check protection to avoid crash for this case
+
+Signed-off-by: Philip Yang <Philip.Yang@amd.com>
+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_chardev.c | 2 +-
+ drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 5 +++++
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+index cc61ec2..62c3d9c 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+@@ -526,7 +526,7 @@ static int kfd_ioctl_dbg_unregister(struct file *filep,
+ long status;
+
+ dev = kfd_device_by_id(args->gpu_id);
+- if (!dev)
++ if (!dev || !dev->dbgmgr)
+ return -EINVAL;
+
+ if (dev->device_info->asic_family == CHIP_CARRIZO) {
+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 2447043..10f9a87 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
+@@ -312,6 +312,10 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid)
+ if (pqn->q) {
+ dqm = pqn->q->device->dqm;
+ retval = dqm->ops.destroy_queue(dqm, &pdd->qpd, pqn->q);
++ if (retval) {
++ pr_debug("Destroy queue failed, returned %d\n", retval);
++ goto err_destroy_queue;
++ }
+ uninit_queue(pqn->q);
+ }
+
+@@ -323,6 +327,7 @@ int pqm_destroy_queue(struct process_queue_manager *pqm, unsigned int qid)
+ list_empty(&pdd->qpd.priv_queue_list))
+ dqm->ops.unregister_process(dqm, &pdd->qpd);
+
++err_destroy_queue:
+ return retval;
+ }
+
+--
+2.7.4
+