From fa7b4a6268ee8fe6de26e297701eda03022d2e51 Mon Sep 17 00:00:00 2001 From: Philip Yang Date: Tue, 20 Jul 2021 22:37:20 -0400 Subject: [PATCH] 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 --- src/fmm.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/fmm.c b/src/fmm.c index 631b521c4d..9bcf9f9115 100644 --- a/src/fmm.c +++ b/src/fmm.c @@ -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; }