libhsakmt: Qyery pointer info flags for registered memory

hsaKmtQueryPointerInfo return vm_obj flags for all below registered
memory types other than hsaKmtAllocMemory, and set the CoarseGrain flag
correctly for:

Graphics: always coarse grain.

Shared: hsaKmtShareMemory pass mflags with export handle to KFD to store
in KFD objs, hsaKmtRegisterSharedHandle get mflags from KFD with import
handle.

Userptr: it is already coarse-grain by default, or based on mflags
provided in hsaKmtRegisterMemoryWithFlags call.



Change-Id: Idc23e8b0cf599b02580737639da2f9ef4ccd0c0d
Signed-off-by: Philip Yang <Philip.Yang@amd.com>
This commit is contained in:
Philip Yang
2021-07-20 22:37:20 -04:00
förälder 2c796e62be
incheckning fa7b4a6268
+6 -3
Visa fil
@@ -3196,6 +3196,7 @@ HSAKMT_STATUS fmm_register_graphics_handle(HSAuint64 GraphicsResourceHandle,
pthread_mutex_lock(&aperture->fmm_mutex);
mflags = fmm_translate_ioc_to_hsa_flags(infoArgs.flags);
mflags.ui32.CoarseGrain = 1;
obj = aperture_allocate_object(aperture, mem, importArgs.handle,
infoArgs.size, mflags);
if (obj) {
@@ -3267,7 +3268,7 @@ HSAKMT_STATUS fmm_share_memory(void *MemoryAddress,
}
exportArgs.handle = obj->handle;
exportArgs.gpu_id = gpu_id;
exportArgs.flags = obj->mflags.Value;
r = kmtIoctl(kfd_fd, AMDKFD_IOC_IPC_EXPORT_HANDLE, (void *)&exportArgs);
if (r)
@@ -3298,7 +3299,7 @@ HSAKMT_STATUS fmm_register_shared_memory(const HsaSharedMemoryHandle *SharedMemo
const HsaSharedMemoryStruct *SharedMemoryStruct =
to_const_hsa_shared_memory_struct(SharedMemoryHandle);
HSAuint64 SizeInPages = SharedMemoryStruct->SizeInPages;
HsaMemFlags mflags = {0};
HsaMemFlags mflags;
if (gpu_id_array_size > 0 && !gpu_id_array)
return HSAKMT_STATUS_INVALID_PARAMETER;
@@ -3326,6 +3327,7 @@ HSAKMT_STATUS fmm_register_shared_memory(const HsaSharedMemoryHandle *SharedMemo
}
pthread_mutex_lock(&aperture->fmm_mutex);
mflags.Value = importArgs.flags;
obj = aperture_allocate_object(aperture, reservedMem, importArgs.handle,
(SizeInPages << PAGE_SHIFT), mflags);
if (!obj) {
@@ -3607,12 +3609,13 @@ HSAKMT_STATUS fmm_get_mem_info(const void *address, HsaPointerInfo *info)
info->MappedNodes = vm_obj->mapped_node_id_array;
info->UserData = vm_obj->user_data;
info->MemFlags = vm_obj->mflags;
if (info->Type == HSA_POINTER_REGISTERED_USER) {
info->CPUAddress = vm_obj->userptr;
info->SizeInBytes = vm_obj->userptr_size;
info->GPUAddress += ((HSAuint64)info->CPUAddress & (PAGE_SIZE - 1));
} else if (info->Type == HSA_POINTER_ALLOCATED) {
info->MemFlags = vm_obj->mflags;
info->CPUAddress = vm_obj->start;
}