mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-27 03:49:57 -04:00
drm/amdkfd: prepare per-process debug enable and disable
The ROCm debugger will attach to a process to debug by PTRACE and will expect the KFD to prepare a process for the target PID, whether the target PID has opened the KFD device or not. This patch is to explicity handle this requirement. Further HW mode setting and runtime coordination requirements will be handled in following patches. In the case where the target process has not opened the KFD device, a new KFD process must be created for the target PID. The debugger as well as the target process for this case will have not acquired any VMs so handle process restoration to correctly account for this. To coordinate with HSA runtime, the debugger must be aware of the target process' runtime enablement status and will copy the runtime status information into the debugged KFD process for later query. On enablement, the debugger will subscribe to a set of exceptions where each exception events will notify the debugger through a pollable FIFO file descriptor that the debugger provides to the KFD to manage. Finally on process termination of either the debugger or the target, debugging must be disabled if it has not been done so. 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:
committed by
Alex Deucher
parent
d230f1bfe7
commit
0ab2d7532b
@@ -920,11 +920,33 @@ struct kfd_process {
|
||||
*/
|
||||
unsigned long last_restore_timestamp;
|
||||
|
||||
/* Indicates device process is debug attached with reserved vmid. */
|
||||
bool debug_trap_enabled;
|
||||
|
||||
/* per-process-per device debug event fd file */
|
||||
struct file *dbg_ev_file;
|
||||
|
||||
/* If the process is a kfd debugger, we need to know so we can clean
|
||||
* up at exit time. If a process enables debugging on itself, it does
|
||||
* its own clean-up, so we don't set the flag here. We track this by
|
||||
* counting the number of processes this process is debugging.
|
||||
*/
|
||||
atomic_t debugged_process_count;
|
||||
|
||||
/* If the process is a debugged, this is the debugger process */
|
||||
struct kfd_process *debugger_process;
|
||||
|
||||
/* Kobj for our procfs */
|
||||
struct kobject *kobj;
|
||||
struct kobject *kobj_queues;
|
||||
struct attribute attr_pasid;
|
||||
|
||||
/* Keep track cwsr init */
|
||||
bool has_cwsr;
|
||||
|
||||
/* Exception code enable mask and status */
|
||||
uint64_t exception_enable_mask;
|
||||
|
||||
/* shared virtual memory registered by this process */
|
||||
struct svm_range_list svms;
|
||||
|
||||
@@ -933,6 +955,10 @@ struct kfd_process {
|
||||
atomic_t poison;
|
||||
/* Queues are in paused stated because we are in the process of doing a CRIU checkpoint */
|
||||
bool queues_paused;
|
||||
|
||||
/* Tracks runtime enable status */
|
||||
struct kfd_runtime_info runtime_info;
|
||||
|
||||
};
|
||||
|
||||
#define KFD_PROCESS_TABLE_SIZE 5 /* bits: 32 entries */
|
||||
@@ -963,7 +989,7 @@ bool kfd_dev_is_large_bar(struct kfd_node *dev);
|
||||
int kfd_process_create_wq(void);
|
||||
void kfd_process_destroy_wq(void);
|
||||
void kfd_cleanup_processes(void);
|
||||
struct kfd_process *kfd_create_process(struct file *filep);
|
||||
struct kfd_process *kfd_create_process(struct task_struct *thread);
|
||||
struct kfd_process *kfd_get_process(const struct task_struct *task);
|
||||
struct kfd_process *kfd_lookup_process_by_pasid(u32 pasid);
|
||||
struct kfd_process *kfd_lookup_process_by_mm(const struct mm_struct *mm);
|
||||
@@ -1108,6 +1134,9 @@ void kfd_process_set_trap_handler(struct qcm_process_device *qpd,
|
||||
uint64_t tba_addr,
|
||||
uint64_t tma_addr);
|
||||
|
||||
/* CWSR initialization */
|
||||
int kfd_process_init_cwsr_apu(struct kfd_process *process, struct file *filep);
|
||||
|
||||
/* CRIU */
|
||||
/*
|
||||
* Need to increment KFD_CRIU_PRIV_VERSION each time a change is made to any of the CRIU private
|
||||
|
||||
Reference in New Issue
Block a user