From 3e9773ff2c9dddc459195e20d6274c843c6483ac Mon Sep 17 00:00:00 2001 From: Harish Kasiviswanathan Date: Mon, 21 Sep 2015 10:40:11 -0400 Subject: [PATCH] Revert "Topology, memory allocation, cleanup issue for gGPU" This reverts commit ee08f537a7552e92d92da55e5e528af0f157050c. Change-Id: I92a4ed91bf566259916d1a96207e1fe9a6099c31 Signed-off-by: Harish Kasiviswanathan --- src/events.c | 7 ------- src/fmm.c | 55 ++++--------------------------------------------- src/fmm.h | 2 -- src/openclose.c | 4 ---- src/topology.c | 10 +++------ 5 files changed, 7 insertions(+), 71 deletions(-) diff --git a/src/events.c b/src/events.c index 747534fa78..7cedacb459 100644 --- a/src/events.c +++ b/src/events.c @@ -42,13 +42,6 @@ static bool IsSystemEventType(HSA_EVENTTYPE type) return (type != HSA_EVENTTYPE_SIGNAL && type != HSA_EVENTTYPE_DEBUG_EVENT); } -void CleanupEvent(void) -{ - // Release is handled during aperture cleanup. - free_exec_aligned_memory_gpu(events_page, KFD_SIGNAL_EVENT_LIMIT * 8); - events_page = NULL; -} - HSAKMT_STATUS HSAKMTAPI hsaKmtCreateEvent( diff --git a/src/fmm.c b/src/fmm.c index cfd24649e4..df864779ea 100644 --- a/src/fmm.c +++ b/src/fmm.c @@ -98,7 +98,6 @@ typedef struct { static gpu_mem_t gpu_mem[] = INIT_GPUs_MEM; static HSAKMT_STATUS dgpu_mem_init(uint8_t node_id, void **base, void **limit); -static HSAKMT_STATUS dgpu_mem_release(void); static int set_dgpu_aperture(uint32_t node_id, uint64_t base, uint64_t limit); static void __fmm_release(uint32_t gpu_id, void *address, uint64_t MemorySizeInBytes, manageble_aperture_t *aperture); @@ -310,7 +309,7 @@ static void *aperture_allocate_area(manageble_aperture_t *app, break; /* address space "hole" */ - if (((VOID_PTRS_SUB(next->start, cur->end) - 1) >= + if ((VOID_PTRS_SUB(next->start, cur->end) >= MemorySizeInBytes)) break; @@ -318,7 +317,7 @@ static void *aperture_allocate_area(manageble_aperture_t *app, }; /* If the new range is inside the reserved aperture */ - if (VOID_PTRS_SUB(app->limit, cur->end) >= + if (VOID_PTRS_SUB(app->limit, cur->end) + 1 >= MemorySizeInBytes) { /* * cur points to the last inspected element: the tail @@ -572,7 +571,6 @@ static void* __fmm_allocate_device(uint32_t gpu_id, uint64_t MemorySizeInBytes, #define GPUVM_APP_OFFSET 0x10000 void *fmm_allocate_device(uint32_t gpu_id, uint64_t MemorySizeInBytes) { - MemorySizeInBytes += 0x8000 - (MemorySizeInBytes % 0x8000); manageble_aperture_t *aperture; int32_t gpu_mem_id; @@ -618,7 +616,6 @@ static void* fmm_allocate_host_gpu(uint32_t gpu_id, manageble_aperture_t *aperture; int32_t gpu_mem_id; uint64_t mmap_offset; - static size_t total_mem = 0; /* Retrieve gpu_mem id according to gpu_id */ gpu_mem_id = gpu_mem_find_by_gpu_id(gpu_id); @@ -640,9 +637,6 @@ static void* fmm_allocate_host_gpu(uint32_t gpu_id, return NULL; } - total_mem += MemorySizeInBytes; - printf("total_mem: %lu\n", total_mem); - return ret; } @@ -762,7 +756,6 @@ void fmm_release(void *address, uint64_t MemorySizeInBytes) if (address >= gpu_mem[i].dgpu_aperture.base && address <= gpu_mem[i].dgpu_aperture.limit) { found = true; - MemorySizeInBytes += 0x8000 - (MemorySizeInBytes % 0x8000); __fmm_release(gpu_mem[i].gpu_id, address, MemorySizeInBytes, &gpu_mem[i].dgpu_aperture); fmm_print(gpu_mem[i].gpu_id); @@ -824,32 +817,6 @@ HSAKMT_STATUS fmm_init_process_apertures(void) return HSAKMT_STATUS_SUCCESS; } -HSAKMT_STATUS fmm_cleanup_process_apertures(void) -{ - uint32_t i; - struct kfd_ioctl_unmap_memory_from_gpu_args unmap_args; - struct kfd_ioctl_free_memory_of_gpu_args free_args; - - for (i = 0 ; i < NUM_OF_SUPPORTED_GPUS; i++) { - vm_object_t *cur = gpu_mem[i].dgpu_aperture.vm_objects; - pthread_mutex_lock(&gpu_mem[i].dgpu_aperture.fmm_mutex); - while (cur) { - unmap_args.handle = cur->handle; - kmtIoctl(kfd_fd, AMDKFD_IOC_UNMAP_MEMORY_FROM_GPU, &unmap_args); - free_args.handle = cur->handle; - kmtIoctl(kfd_fd, AMDKFD_IOC_FREE_MEMORY_OF_GPU, &free_args); - aperture_release_area(&gpu_mem[i].dgpu_aperture, cur->start, cur->size); - vm_object_t* temp = cur; - cur = temp->next; - vm_remove_object(&gpu_mem[i].dgpu_aperture, temp); - }; - pthread_mutex_unlock(&gpu_mem[i].dgpu_aperture.fmm_mutex); - } - - dgpu_mem_release(); - return HSAKMT_STATUS_SUCCESS; -} - HSAuint64 fmm_get_aperture_limit(aperture_type_e aperture_type, HSAuint32 gpu_id) { int32_t slot = gpu_mem_find_by_gpu_id(gpu_id); @@ -1093,7 +1060,7 @@ static HSAKMT_STATUS dgpu_mem_init(uint8_t node_id, void **base, void **limit) bool found; HSAKMT_STATUS ret; void *addr, *ret_addr; - HSAuint64 max_len; + uint32_t max_len; long long unsigned int temp; uint32_t gpu_id; HsaNodeProperties props; @@ -1110,7 +1077,7 @@ static HSAKMT_STATUS dgpu_mem_init(uint8_t node_id, void **base, void **limit) if (ret != HSAKMT_STATUS_SUCCESS) return ret; - max_len = props.LocalMemSize; + max_len = (uint32_t)props.LocalMemSize; found = false; for (addr = (void *)PAGE_SIZE, ret_addr = NULL; @@ -1143,20 +1110,6 @@ static HSAKMT_STATUS dgpu_mem_init(uint8_t node_id, void **base, void **limit) return HSAKMT_STATUS_ERROR; } -static HSAKMT_STATUS dgpu_mem_release(void) -{ - size_t max_len; - if (is_dgpu_mem_init) { - max_len = (size_t)dgpu_shared_aperture_limit - - (size_t)dgpu_shared_aperture_base; - munmap(dgpu_shared_aperture_base, max_len); - is_dgpu_mem_init = false; - dgpu_shared_aperture_base = NULL; - dgpu_shared_aperture_limit = NULL; - } - return HSAKMT_STATUS_SUCCESS; -} - bool fmm_get_handle(void *address, uint64_t *handle) { int32_t i; diff --git a/src/fmm.h b/src/fmm.h index 30af235170..c2ff77e074 100644 --- a/src/fmm.h +++ b/src/fmm.h @@ -43,9 +43,7 @@ typedef struct { void* start_address; } aperture_properties_t; -void CleanupEvent(void); HSAKMT_STATUS fmm_init_process_apertures(void); -HSAKMT_STATUS fmm_cleanup_process_apertures(void); /* * Memory interface */ diff --git a/src/openclose.c b/src/openclose.c index 47aef0df7a..d5b91e23dd 100644 --- a/src/openclose.c +++ b/src/openclose.c @@ -30,7 +30,6 @@ #include #include #include -#include #include "fmm.h" static const char kfd_device_name[] = "/dev/kfd"; @@ -91,9 +90,6 @@ hsaKmtCloseKFD(void) { if (--kfd_open_count == 0) { - printf("cleanup aperture\n"); - CleanupEvent(); - fmm_cleanup_process_apertures(); close(kfd_fd); if (amd_hsa_thunk_lock_fd > 0) { diff --git a/src/topology.c b/src/topology.c index f367428dd0..608efa2d71 100644 --- a/src/topology.c +++ b/src/topology.c @@ -319,12 +319,8 @@ topology_sysfs_get_node_props(uint32_t node_id, HsaNodeProperties *props, uint32 while(sscanf(p+=prog, "%s %llu\n%n", prop_name, &prop_val, &prog) == 2) { if (strcmp(prop_name,"cpu_cores_count") == 0) props->NumCPUCores = (uint32_t)prop_val; - else if (strcmp(prop_name,"simd_count") == 0) { - if ((uint32_t)prop_val == 0) - props->NumFComputeCores = (uint32_t)1; - else - props->NumFComputeCores = (uint32_t)prop_val; - } + else if (strcmp(prop_name,"simd_count") == 0) + props->NumFComputeCores = (uint32_t)prop_val; else if (strcmp(prop_name,"mem_banks_count") == 0) props->NumMemoryBanks = (uint32_t)prop_val; else if (strcmp(prop_name,"caches_count") == 0) @@ -368,7 +364,7 @@ topology_sysfs_get_node_props(uint32_t node_id, HsaNodeProperties *props, uint32 else if (strcmp(prop_name,"max_engine_clk_ccompute") == 0) props->MaxEngineClockMhzCCompute = (uint32_t)prop_val; else if (strcmp(prop_name,"local_mem_size") == 0) - props->LocalMemSize = (HSAuint64)prop_val; + props->LocalMemSize = (uint32_t)prop_val; }