aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
diff options
context:
space:
mode:
authorMonk Liu <Monk.Liu@amd.com>2017-09-19 03:40:56 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-12-04 16:41:31 -0500
commit77a3c96b1bcb5f69367df79f964367dd7f086dcc (patch)
treeae4c23a6cf09a9dd1fb712f29feb13a018348563 /drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
parent503846e0836a62f6efd536a4c495917c1a50b345 (diff)
drm/amdgpu/sriov:fix memory leak in psp_load_fw
for SR-IOV when doing gpu reset this routine shouldn't do resource allocating otherwise memory leak Signed-off-by: Monk Liu <Monk.Liu@amd.com> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
index 76f531b8e97b..2157d4509e84 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
@@ -334,23 +334,26 @@ static int psp_load_fw(struct amdgpu_device *adev)
334 int ret; 334 int ret;
335 struct psp_context *psp = &adev->psp; 335 struct psp_context *psp = &adev->psp;
336 336
337 if (amdgpu_sriov_vf(adev) && adev->in_gpu_reset != 0)
338 goto skip_memalloc;
339
337 psp->cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL); 340 psp->cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);
338 if (!psp->cmd) 341 if (!psp->cmd)
339 return -ENOMEM; 342 return -ENOMEM;
340 343
341 ret = amdgpu_bo_create_kernel(adev, PSP_1_MEG, PSP_1_MEG, 344 ret = amdgpu_bo_create_kernel(adev, PSP_1_MEG, PSP_1_MEG,
342 AMDGPU_GEM_DOMAIN_GTT, 345 AMDGPU_GEM_DOMAIN_GTT,
343 &psp->fw_pri_bo, 346 &psp->fw_pri_bo,
344 &psp->fw_pri_mc_addr, 347 &psp->fw_pri_mc_addr,
345 &psp->fw_pri_buf); 348 &psp->fw_pri_buf);
346 if (ret) 349 if (ret)
347 goto failed; 350 goto failed;
348 351
349 ret = amdgpu_bo_create_kernel(adev, PSP_FENCE_BUFFER_SIZE, PAGE_SIZE, 352 ret = amdgpu_bo_create_kernel(adev, PSP_FENCE_BUFFER_SIZE, PAGE_SIZE,
350 AMDGPU_GEM_DOMAIN_VRAM, 353 AMDGPU_GEM_DOMAIN_VRAM,
351 &psp->fence_buf_bo, 354 &psp->fence_buf_bo,
352 &psp->fence_buf_mc_addr, 355 &psp->fence_buf_mc_addr,
353 &psp->fence_buf); 356 &psp->fence_buf);
354 if (ret) 357 if (ret)
355 goto failed_mem2; 358 goto failed_mem2;
356 359
@@ -375,6 +378,7 @@ static int psp_load_fw(struct amdgpu_device *adev)
375 if (ret) 378 if (ret)
376 goto failed_mem; 379 goto failed_mem;
377 380
381skip_memalloc:
378 ret = psp_hw_start(psp); 382 ret = psp_hw_start(psp);
379 if (ret) 383 if (ret)
380 goto failed_mem; 384 goto failed_mem;