From: Honglei Huang <[email protected]> Introduce new UAPI structures to support batch allocation of non-contiguous userptr ranges in a single ioctl call.
add: - KFD_IOC_ALLOC_MEM_FLAGS_USERPTR_BATCH flag - struct kfd_ioctl_userptr_range for individual ranges - struct kfd_ioctl_userptr_ranges_data for batch data Signed-off-by: Honglei Huang <[email protected]> --- include/uapi/linux/kfd_ioctl.h | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h index 84aa24c02..579850e70 100644 --- a/include/uapi/linux/kfd_ioctl.h +++ b/include/uapi/linux/kfd_ioctl.h @@ -420,16 +420,45 @@ struct kfd_ioctl_acquire_vm_args { #define KFD_IOC_ALLOC_MEM_FLAGS_UNCACHED (1 << 25) #define KFD_IOC_ALLOC_MEM_FLAGS_EXT_COHERENT (1 << 24) #define KFD_IOC_ALLOC_MEM_FLAGS_CONTIGUOUS (1 << 23) +#define KFD_IOC_ALLOC_MEM_FLAGS_USERPTR_BATCH (1 << 22) + +/* Userptr range for batch allocation + * + * @start: start address of user virtual memory range + * @size: size of this user virtual memory range in bytes + */ +struct kfd_ioctl_userptr_range { + __u64 start; /* to KFD */ + __u64 size; /* to KFD */ +}; + +/* Complete userptr batch allocation data structure + * + * This structure combines the header and ranges array for convenience. + * User space can allocate memory for this structure with the desired + * number of ranges and pass a pointer to it via mmap_offset field. + * + * @num_ranges: number of ranges in the ranges array + * @reserved: reserved for future use, must be 0 + * @ranges: flexible array of userptr ranges + */ +struct kfd_ioctl_userptr_ranges_data { + __u32 num_ranges; /* to KFD */ + __u32 reserved; /* to KFD, must be 0 */ + struct kfd_ioctl_userptr_range ranges[]; /* to KFD */ +}; /* Allocate memory for later SVM (shared virtual memory) mapping. * * @va_addr: virtual address of the memory to be allocated * all later mappings on all GPUs will use this address - * @size: size in bytes + * @size: size in bytes (total size for batch allocation) * @handle: buffer handle returned to user mode, used to refer to * this allocation for mapping, unmapping and freeing * @mmap_offset: for CPU-mapping the allocation by mmapping a render node * for userptrs this is overloaded to specify the CPU address + * for batch userptr (KFD_IOC_ALLOC_MEM_FLAGS_USERPTR_BATCH), + * this should point to a kfd_ioctl_userptr_ranges_data structure * @gpu_id: device identifier * @flags: memory type and attributes. See KFD_IOC_ALLOC_MEM_FLAGS above */ -- 2.34.1
