[libc] Free the GPU memory allocated in the device loaders

Summary:
This part was ignored and we just hoped that shutting down the runtime
freed these correctly. But it's best to be specific and free the memory
we've allocated.
This commit is contained in:
Joseph Huber
2023-04-03 11:54:48 -05:00
parent d891968f10
commit dfc162ad3f
2 changed files with 28 additions and 0 deletions

View File

@@ -417,6 +417,22 @@ int load(int argc, char **argv, char **envp, void *image, size_t size) {
// Save the return value and perform basic clean-up.
int ret = *static_cast<int *>(host_ret);
// Free the memory allocated for the device.
if (hsa_status_t err = hsa_amd_memory_pool_free(args))
handle_error(err);
if (hsa_status_t err = hsa_amd_memory_pool_free(dev_argv))
handle_error(err);
if (hsa_status_t err = hsa_amd_memory_pool_free(dev_ret))
handle_error(err);
if (hsa_status_t err = hsa_amd_memory_pool_free(server_inbox))
handle_error(err);
if (hsa_status_t err = hsa_amd_memory_pool_free(server_outbox))
handle_error(err);
if (hsa_status_t err = hsa_amd_memory_pool_free(buffer))
handle_error(err);
if (hsa_status_t err = hsa_amd_memory_pool_free(host_ret))
handle_error(err);
if (hsa_status_t err = hsa_signal_destroy(memory_signal))
handle_error(err);

View File

@@ -176,6 +176,18 @@ int load(int argc, char **argv, char **envp, void *image, size_t size) {
if (CUresult err = cuStreamSynchronize(stream))
handle_error(err);
// Free the memory allocated for the device.
if (CUresult err = cuMemFree(dev_ret))
handle_error(err);
if (CUresult err = cuMemFreeHost(dev_argv))
handle_error(err);
if (CUresult err = cuMemFreeHost(server_inbox))
handle_error(err);
if (CUresult err = cuMemFreeHost(server_outbox))
handle_error(err);
if (CUresult err = cuMemFreeHost(buffer))
handle_error(err);
// Destroy the context and the loaded binary.
if (CUresult err = cuModuleUnload(binary))
handle_error(err);