drm/amdkfd: add debug set exceptions enabled operation
The debugger subscibes to nofication for requested exceptions on attach. Allow the debugger to change its subsciption later on. Signed-off-by: Jonathan Kim <jonathan.kim@amd.com> Reviewed-by: Felix Kuehling <felix.kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
12fb1ad70d
commit
e90bf919f7
|
@ -2980,6 +2980,9 @@ static int kfd_ioctl_set_debug_trap(struct file *filep, struct kfd_process *p, v
|
||||||
args->send_runtime_event.exception_mask);
|
args->send_runtime_event.exception_mask);
|
||||||
break;
|
break;
|
||||||
case KFD_IOC_DBG_TRAP_SET_EXCEPTIONS_ENABLED:
|
case KFD_IOC_DBG_TRAP_SET_EXCEPTIONS_ENABLED:
|
||||||
|
kfd_dbg_set_enabled_debug_exception_mask(target,
|
||||||
|
args->set_exceptions_enabled.exception_mask);
|
||||||
|
break;
|
||||||
case KFD_IOC_DBG_TRAP_SET_WAVE_LAUNCH_OVERRIDE:
|
case KFD_IOC_DBG_TRAP_SET_WAVE_LAUNCH_OVERRIDE:
|
||||||
case KFD_IOC_DBG_TRAP_SET_WAVE_LAUNCH_MODE:
|
case KFD_IOC_DBG_TRAP_SET_WAVE_LAUNCH_MODE:
|
||||||
case KFD_IOC_DBG_TRAP_SUSPEND_QUEUES:
|
case KFD_IOC_DBG_TRAP_SUSPEND_QUEUES:
|
||||||
|
|
|
@ -521,3 +521,39 @@ int kfd_dbg_trap_enable(struct kfd_process *target, uint32_t fd,
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void kfd_dbg_set_enabled_debug_exception_mask(struct kfd_process *target,
|
||||||
|
uint64_t exception_set_mask)
|
||||||
|
{
|
||||||
|
uint64_t found_mask = 0;
|
||||||
|
struct process_queue_manager *pqm;
|
||||||
|
struct process_queue_node *pqn;
|
||||||
|
static const char write_data = '.';
|
||||||
|
loff_t pos = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
mutex_lock(&target->event_mutex);
|
||||||
|
|
||||||
|
found_mask |= target->exception_status;
|
||||||
|
|
||||||
|
pqm = &target->pqm;
|
||||||
|
list_for_each_entry(pqn, &pqm->queues, process_queue_list) {
|
||||||
|
if (!pqn)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
found_mask |= pqn->q->properties.exception_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < target->n_pdds; i++) {
|
||||||
|
struct kfd_process_device *pdd = target->pdds[i];
|
||||||
|
|
||||||
|
found_mask |= pdd->exception_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exception_set_mask & found_mask)
|
||||||
|
kernel_write(target->dbg_ev_file, &write_data, 1, &pos);
|
||||||
|
|
||||||
|
target->exception_enable_mask = exception_set_mask;
|
||||||
|
|
||||||
|
mutex_unlock(&target->event_mutex);
|
||||||
|
}
|
||||||
|
|
|
@ -56,6 +56,8 @@ static inline bool kfd_dbg_is_per_vmid_supported(struct kfd_node *dev)
|
||||||
|
|
||||||
void debug_event_write_work_handler(struct work_struct *work);
|
void debug_event_write_work_handler(struct work_struct *work);
|
||||||
|
|
||||||
|
void kfd_dbg_set_enabled_debug_exception_mask(struct kfd_process *target,
|
||||||
|
uint64_t exception_set_mask);
|
||||||
/*
|
/*
|
||||||
* If GFX off is enabled, chips that do not support RLC restore for the debug
|
* If GFX off is enabled, chips that do not support RLC restore for the debug
|
||||||
* registers will disable GFX off temporarily for the entire debug session.
|
* registers will disable GFX off temporarily for the entire debug session.
|
||||||
|
|
Loading…
Reference in New Issue