[PATCH v2 2/8] drm/amdkfd: Add KFD SMI event IDs and triggers

Felix Kuehling felix.kuehling at amd.com
Tue Jan 25 17:05:55 UTC 2022


Am 2022-01-20 um 18:13 schrieb Philip Yang:
> Define new system management interface event IDs, migration triggers and
> user queue eviction triggers, those will be implemented in the following
> patches.
>
> Signed-off-by: Philip Yang <Philip.Yang at amd.com>
> ---
>   include/uapi/linux/kfd_ioctl.h | 27 +++++++++++++++++++++++++++
>   1 file changed, 27 insertions(+)
>
> diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h
> index af96af174dc4..de0b5bb95db3 100644
> --- a/include/uapi/linux/kfd_ioctl.h
> +++ b/include/uapi/linux/kfd_ioctl.h
> @@ -459,10 +459,37 @@ enum kfd_smi_event {
> 	KFD_SMI_EVENT_THERMAL_THROTTLE = 2,
>   	KFD_SMI_EVENT_GPU_PRE_RESET = 3,
>   	KFD_SMI_EVENT_GPU_POST_RESET = 4,
> +	KFD_SMI_EVENT_MIGRATION = 5,
> +	KFD_SMI_EVENT_PAGE_FAULT_START = 6,
> +	KFD_SMI_EVENT_PAGE_FAULT_END = 7,
> +	KFD_SMI_EVENT_QUEUE_EVICTION = 8,
> +	KFD_SMI_EVENT_QUEUE_EVICTION_RESTORE = 9,
> +	KFD_SMI_EVENT_UNMAP_FROM_GPU = 10,
> +
> +	/*
> +	 * max event number, as a flag bit to get events from all processes,
> +	 * this requires super user permission, otherwise will not be able to
> +	 * receive event from any process. Without this flag to receive events
> +	 * from same process.
> +	 */
> +	KFD_SMI_EVENT_ALL_PROCESS = 64
>   };
>   
>   #define KFD_SMI_EVENT_MASK_FROM_INDEX(i) (1ULL << ((i) - 1))
>   
> +enum KFD_MIGRATION_QUEUE_EVICTION_UNMAP_EVENT_TRIGGER {
> +	MIGRATION_TRIGGER_PREFETCH = 1,
> +	MIGRATION_TRIGGER_PAGEFAULT,

Call this KFD_MIGRATION_TRIGGER_PAGEFAULT_GPU for consistency. Add the 
KFD_ prefix to all the migration triggers.


> +	MIGRATION_TRIGGER_PAGEFAULT_CPU,
> +	MIGRATION_TRIGGER_TTM_EVICTION,
> +	SVM_RANGE_EVICTION,
> +	SVM_RANGE_MIGRATION,
> +	USERPTR_EVICTION,
> +	TTM_EVICTION,
> +	UNMAP_FROM_CPU,
> +	SUSPEND_EVICTION
Migration triggers and queue eviction triggers should be separate enums. 
The eviction triggers should have a consistent prefix: 
KFD_QUEUE_EVICTION_TRIGGER...

I'm not sure the distinction between SVM_RANGE_MIGRATION and 
SVM_RANGE_EVICTION is useful. It should be clear from the context, since 
migrations log their own events. If anything, the term 
SVM_RANGE_EVICTION is misleading. It's really any MMU notifier that's 
not MMU_NOTIFY_MIGRATE or MMU_NOTIFY_UNMAP.

I'd suggest the following names:

KFD_QUEUE_EVICTION_TRIGGER_SVM
KFD_QUEUE_EVICTION_TRIGGER_USERPTR
KFD_QUEUE_EVICTION_TRIGGER_TTM
KFD_QUEUE_EVICTION_TRIGGER_SUSPEND

Then there are triggers for unmapping from GPU, which seems to have some 
overlap with queue eviction in svm_range_evict. But that becomes a bit 
easier if you remove the distinction between SVM_RANGE_MIGRATION and 
SVM_RANGE_EVICTION. Then you are left with these two unmap triggers:

KFD_SVM_UNMAP_TRIGGER_MMU_NOTIFIER
KFD_SVM_UNMAP_TRIGGER_UNMAP_FROM_CPU

Regards,
   Felix


> +};
> +
>   struct kfd_ioctl_smi_events_args {
>   	__u32 gpuid;	/* to KFD */
>   	__u32 anon_fd;	/* from KFD */


More information about the amd-gfx mailing list