aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0125-drm-amdkfd-Add-module-parameter-of-send_sigterm.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0125-drm-amdkfd-Add-module-parameter-of-send_sigterm.patch')
-rw-r--r--common/recipes-kernel/linux/files/0125-drm-amdkfd-Add-module-parameter-of-send_sigterm.patch89
1 files changed, 89 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0125-drm-amdkfd-Add-module-parameter-of-send_sigterm.patch b/common/recipes-kernel/linux/files/0125-drm-amdkfd-Add-module-parameter-of-send_sigterm.patch
new file mode 100644
index 00000000..dc8a088f
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0125-drm-amdkfd-Add-module-parameter-of-send_sigterm.patch
@@ -0,0 +1,89 @@
+From 81663016dbfd53e29d1b5c5ddbc9b12ae1d66474 Mon Sep 17 00:00:00 2001
+From: Oded Gabbay <oded.gabbay@gmail.com>
+Date: Wed, 24 Dec 2014 13:30:52 +0200
+Subject: [PATCH 0125/1050] drm/amdkfd: Add module parameter of send_sigterm
+
+This patch adds a new kernel module parameter to amdkfd,
+called send_sigterm.
+
+This parameter specifies whether amdkfd should send the
+SIGTERM signal to an HSA process, when the following conditions
+occur:
+
+1. The GPU triggers an exception regarding a kernel that was
+ issued by this process.
+
+2. The HSA process isn't waiting on an event that handles
+ this exception.
+
+The default behavior is not to send a SIGTERM and suffice
+with a dmesg error print.
+
+Reviewed-by: Ben Goz <ben.goz@amd.com>
+Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_events.c | 12 +++++++++---
+ drivers/gpu/drm/amd/amdkfd/kfd_module.c | 5 +++++
+ drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 6 ++++++
+ 3 files changed, 20 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
+index 5c3a81e..3cb37d2 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
+@@ -872,10 +872,16 @@ static void lookup_events_by_type_and_signal(struct kfd_process *p,
+
+ /* Send SIGTERM no event of type "type" has been found*/
+ if (send_signal) {
+- dev_warn(kfd_device,
+- "Sending SIGTERM to HSA Process with PID %d ",
++ if (send_sigterm) {
++ dev_warn(kfd_device,
++ "Sending SIGTERM to HSA Process with PID %d ",
++ p->lead_thread->pid);
++ send_sig(SIGTERM, p->lead_thread, 0);
++ } else {
++ dev_err(kfd_device,
++ "HSA Process (PID %d) got unhandled exception",
+ p->lead_thread->pid);
+- send_sig(SIGTERM, p->lead_thread, 0);
++ }
+ }
+ }
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_module.c b/drivers/gpu/drm/amd/amdkfd/kfd_module.c
+index 4e0a68f..e4fc96e 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_module.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_module.c
+@@ -54,6 +54,11 @@ module_param(max_num_of_queues_per_device, int, 0444);
+ MODULE_PARM_DESC(max_num_of_queues_per_device,
+ "Maximum number of supported queues per device (1 = Minimum, 4096 = default)");
+
++int send_sigterm;
++module_param(send_sigterm, int, 0444);
++MODULE_PARM_DESC(send_sigterm,
++ "Send sigterm to HSA process on unhandled exception (0 = disable, 1 = enable)");
++
+ bool kgd2kfd_init(unsigned interface_version, const struct kgd2kfd_calls **g2f)
+ {
+ /*
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+index 9383494..b6f838f 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+@@ -74,6 +74,12 @@ extern int max_num_of_queues_per_device;
+ /* Kernel module parameter to specify the scheduling policy */
+ extern int sched_policy;
+
++/*
++ * Kernel module parameter to specify whether to send sigterm to HSA process on
++ * unhandled exception
++ */
++extern int send_sigterm;
++
+ /**
+ * enum kfd_sched_policy
+ *
+--
+1.9.1
+