drm/amdgpu: fix kcq mqd_backup buffer double free for multi-XCD
authorShiwu Zhang <shiwu.zhang@amd.com>
Fri, 11 Nov 2022 07:54:52 +0000 (15:54 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Jun 2023 13:48:52 +0000 (09:48 -0400)
For gfx_v9_4_3 and beyond, struct kiq has its own mqd_backup pointer
rather than using the last pointer from mec struct. Then the kfree
operation on the pointer from the mec struct should be removed otherwise
it will cause double free on the first kcq's mqd_backup buffer on XCD1.

Signed-off-by: Shiwu Zhang <shiwu.zhang@amd.com>
Reviewed-by: Le Ma <le.ma@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c

index c2e92664031b76ecd52e84dfe64a058e218d4151..8aea9e02327559edfa9589c6f6e203eeec3ec13f 100644 (file)
@@ -480,7 +480,6 @@ void amdgpu_gfx_mqd_sw_fini(struct amdgpu_device *adev, int xcc_id)
 
        ring = &kiq->ring;
        kfree(kiq->mqd_backup);
-       kfree(adev->gfx.mec.mqd_backup[AMDGPU_MAX_COMPUTE_RINGS]);
        amdgpu_bo_free_kernel(&ring->mqd_obj,
                              &ring->mqd_gpu_addr,
                              &ring->mqd_ptr);