[PATCH 19/29] drm/amdkfd: add debug set exceptions enabled operation
Felix Kuehling
felix.kuehling at amd.com
Thu Nov 24 21:24:43 UTC 2022
Am 2022-10-31 um 12:23 schrieb Jonathan Kim:
> 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 at amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 3 ++
> drivers/gpu/drm/amd/amdkfd/kfd_debug.c | 36 ++++++++++++++++++++++++
> drivers/gpu/drm/amd/amdkfd/kfd_debug.h | 2 ++
> 3 files changed, 41 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> index 27cd5af72521..61612b9bdf8c 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
> @@ -2887,6 +2887,9 @@ static int kfd_ioctl_set_debug_trap(struct file *filep, struct kfd_process *p, v
> args->send_runtime_event.exception_mask);
> break;
> 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_MODE:
> case KFD_IOC_DBG_TRAP_SUSPEND_QUEUES:
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_debug.c b/drivers/gpu/drm/amd/amdkfd/kfd_debug.c
> index 3d304e8c286e..594ccca25cae 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_debug.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_debug.c
> @@ -441,3 +441,39 @@ int kfd_dbg_trap_enable(struct kfd_process *target, uint32_t fd,
>
> 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);
> +}
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_debug.h b/drivers/gpu/drm/amd/amdkfd/kfd_debug.h
> index 5270d5749828..837e09491a76 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_debug.h
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_debug.h
> @@ -58,6 +58,8 @@ static inline bool kfd_dbg_is_per_vmid_supported(struct kfd_dev *dev)
>
> 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
> * registers will disable GFX off temporarily for the entire debug session.
More information about the amd-gfx
mailing list