Commit 81663016 authored by Oded Gabbay's avatar Oded Gabbay

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: default avatarBen Goz <ben.goz@amd.com>
Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
parent 930c5ff4
...@@ -872,10 +872,16 @@ static void lookup_events_by_type_and_signal(struct kfd_process *p, ...@@ -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*/ /* Send SIGTERM no event of type "type" has been found*/
if (send_signal) { if (send_signal) {
dev_warn(kfd_device, if (send_sigterm) {
"Sending SIGTERM to HSA Process with PID %d ", 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); p->lead_thread->pid);
send_sig(SIGTERM, p->lead_thread, 0); }
} }
} }
......
...@@ -54,6 +54,11 @@ module_param(max_num_of_queues_per_device, int, 0444); ...@@ -54,6 +54,11 @@ module_param(max_num_of_queues_per_device, int, 0444);
MODULE_PARM_DESC(max_num_of_queues_per_device, MODULE_PARM_DESC(max_num_of_queues_per_device,
"Maximum number of supported queues per device (1 = Minimum, 4096 = default)"); "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) bool kgd2kfd_init(unsigned interface_version, const struct kgd2kfd_calls **g2f)
{ {
/* /*
......
...@@ -74,6 +74,12 @@ extern int max_num_of_queues_per_device; ...@@ -74,6 +74,12 @@ extern int max_num_of_queues_per_device;
/* Kernel module parameter to specify the scheduling policy */ /* Kernel module parameter to specify the scheduling policy */
extern int sched_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 * enum kfd_sched_policy
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment