[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