ras_err_data.err_addr was never allocated

Signed-off-by: Andrey Grodzovsky <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
index 50c13b0..d9fb860 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
@@ -1011,6 +1011,21 @@ static void amdgpu_ras_interrupt_handler(struct 
ras_manager *obj)
        int ret;
        struct ras_err_data err_data = {0, 0, 0, NULL};
 
+       /* Allocate enough to serve max  number of requests*/
+       int err_addr_size = data->ring_size / data->aligned_element_size *
+                          obj->adev->umc.umc_inst_num *
+                          obj->adev->umc.channel_inst_num;
+
+       err_data.err_addr = kcalloc(err_addr_size,
+                                   sizeof(*err_data.err_addr),
+                                   GFP_KERNEL);
+
+       if (!err_data.err_addr) {
+               DRM_ERROR("Not enough memory!");
+               return;
+       }
+
+
        while (data->rptr != data->wptr) {
                rmb();
                memcpy(&entry, &data->ring[data->rptr],
@@ -1039,6 +1054,8 @@ static void amdgpu_ras_interrupt_handler(struct 
ras_manager *obj)
                        }
                }
        }
+
+        kfree(err_data.err_addr);
 }
 
 static void amdgpu_ras_interrupt_process_handler(struct work_struct *work)
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to