]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
amdkfd: properly free gang_ctx_bo when failed to init user queue
authorZhu Lingshan <lingshan.zhu@amd.com>
Sun, 26 Jan 2025 09:21:10 +0000 (17:21 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Feb 2025 13:01:20 +0000 (14:01 +0100)
[ Upstream commit a33f7f9660705fb2ecf3467b2c48965564f392ce ]

The destructor of a gtt bo is declared as
void amdgpu_amdkfd_free_gtt_mem(struct amdgpu_device *adev, void **mem_obj);
Which takes void** as the second parameter.

GCC allows passing void* to the function because void* can be implicitly
casted to any other types, so it can pass compiling.

However, passing this void* parameter into the function's
execution process(which expects void** and dereferencing void**)
will result in errors.

Signed-off-by: Zhu Lingshan <lingshan.zhu@amd.com>
Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
Fixes: fb91065851cd ("drm/amdkfd: Refactor queue wptr_bo GART mapping")
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c

index dbb63ce316f11e80437d03136f2de049827e3b9f..42fd7669ac7d37a988c9fde3ac72009ac136b55c 100644 (file)
@@ -298,7 +298,7 @@ static int init_user_queue(struct process_queue_manager *pqm,
        return 0;
 
 free_gang_ctx_bo:
-       amdgpu_amdkfd_free_gtt_mem(dev->adev, (*q)->gang_ctx_bo);
+       amdgpu_amdkfd_free_gtt_mem(dev->adev, &(*q)->gang_ctx_bo);
 cleanup:
        uninit_queue(*q);
        *q = NULL;