From 43425796451309ee1df4f23fa89b9d08ebcdd3e8 Mon Sep 17 00:00:00 2001 From: Alysa Liu Date: Wed, 15 Oct 2025 14:52:40 -0400 Subject: [PATCH] libhsakmt: Fix memory leak for events_page metadata (#807) --- projects/rocr-runtime/libhsakmt/src/fmm.c | 9 ++++++++- projects/rocr-runtime/libhsakmt/src/libhsakmt.h | 1 + projects/rocr-runtime/libhsakmt/src/openclose.c | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/projects/rocr-runtime/libhsakmt/src/fmm.c b/projects/rocr-runtime/libhsakmt/src/fmm.c index e9e6900702..adb5dddaa6 100644 --- a/projects/rocr-runtime/libhsakmt/src/fmm.c +++ b/projects/rocr-runtime/libhsakmt/src/fmm.c @@ -4573,7 +4573,6 @@ static void fmm_clear_aperture(manageable_aperture_t *app) void hsakmt_fmm_clear_all_mem(void) { uint32_t i; - void *map_addr; /* Close render node FDs. The child process needs to open new ones */ for (i = 0; i <= DRM_LAST_RENDER_NODE - DRM_FIRST_RENDER_NODE; i++) { @@ -4587,6 +4586,14 @@ void hsakmt_fmm_clear_all_mem(void) drm_render_fds[i] = 0; } + hsakmt_fmm_clear_all_aperture(); +} + +void hsakmt_fmm_clear_all_aperture(void) +{ + uint32_t i; + void *map_addr; + fmm_clear_aperture(&mem_handle_aperture); fmm_clear_aperture(&cpuvm_aperture); fmm_clear_aperture(&svm.apertures[SVM_DEFAULT]); diff --git a/projects/rocr-runtime/libhsakmt/src/libhsakmt.h b/projects/rocr-runtime/libhsakmt/src/libhsakmt.h index f7387082d7..6f66d20bf4 100644 --- a/projects/rocr-runtime/libhsakmt/src/libhsakmt.h +++ b/projects/rocr-runtime/libhsakmt/src/libhsakmt.h @@ -241,6 +241,7 @@ extern int hsakmt_ioctl(int fd, unsigned long request, void *arg); void hsakmt_clear_events_page(void); void hsakmt_fmm_clear_all_mem(void); +void hsakmt_fmm_clear_all_aperture(void); void hsakmt_clear_process_doorbells(void); uint32_t hsakmt_get_num_sysfs_nodes(void); diff --git a/projects/rocr-runtime/libhsakmt/src/openclose.c b/projects/rocr-runtime/libhsakmt/src/openclose.c index 8929072f33..d738fcc747 100644 --- a/projects/rocr-runtime/libhsakmt/src/openclose.c +++ b/projects/rocr-runtime/libhsakmt/src/openclose.c @@ -266,6 +266,7 @@ HSAKMT_STATUS HSAKMTAPI hsaKmtCloseKFD(void) if (--hsakmt_kfd_open_count == 0) { hsakmt_destroy_counter_props(); hsakmt_destroy_device_debugging_memory(); + hsakmt_fmm_clear_all_aperture(); } result = HSAKMT_STATUS_SUCCESS;