[PATCH 8/9] drm/amdgpu/sriov:fix memory leak in psp_load_fw

2017-10-25 Thread Monk Liu
for SR-IOV when doing gpu reset this routine shouldn't do
resource allocating otherwise memory leak

Change-Id: I25da3a5b475196c75c7e639adc40751754625968
Signed-off-by: Monk Liu 
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 20 
 1 file 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 76f531b..2157d45 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)
int ret;
struct psp_context *psp = &adev->psp;
 
+   if (amdgpu_sriov_vf(adev) && adev->in_gpu_reset != 0)
+   goto skip_memalloc;
+
psp->cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);
if (!psp->cmd)
return -ENOMEM;
 
ret = amdgpu_bo_create_kernel(adev, PSP_1_MEG, PSP_1_MEG,
- AMDGPU_GEM_DOMAIN_GTT,
- &psp->fw_pri_bo,
- &psp->fw_pri_mc_addr,
- &psp->fw_pri_buf);
+   AMDGPU_GEM_DOMAIN_GTT,
+   &psp->fw_pri_bo,
+   &psp->fw_pri_mc_addr,
+   &psp->fw_pri_buf);
if (ret)
goto failed;
 
ret = amdgpu_bo_create_kernel(adev, PSP_FENCE_BUFFER_SIZE, PAGE_SIZE,
- AMDGPU_GEM_DOMAIN_VRAM,
- &psp->fence_buf_bo,
- &psp->fence_buf_mc_addr,
- &psp->fence_buf);
+   AMDGPU_GEM_DOMAIN_VRAM,
+   &psp->fence_buf_bo,
+   &psp->fence_buf_mc_addr,
+   &psp->fence_buf);
if (ret)
goto failed_mem2;
 
@@ -375,6 +378,7 @@ static int psp_load_fw(struct amdgpu_device *adev)
if (ret)
goto failed_mem;
 
+skip_memalloc:
ret = psp_hw_start(psp);
if (ret)
goto failed_mem;
-- 
2.7.4

___
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx


Re: [PATCH 8/9] drm/amdgpu/sriov:fix memory leak in psp_load_fw

2017-10-26 Thread Christian König

Am 25.10.2017 um 11:22 schrieb Monk Liu:

for SR-IOV when doing gpu reset this routine shouldn't do
resource allocating otherwise memory leak


Can't judge if this patch is correct or not, but fixing the whitespaces 
should be a separate patch.


Christian.



Change-Id: I25da3a5b475196c75c7e639adc40751754625968
Signed-off-by: Monk Liu 
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 20 
  1 file 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 76f531b..2157d45 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)
int ret;
struct psp_context *psp = &adev->psp;
  
+	if (amdgpu_sriov_vf(adev) && adev->in_gpu_reset != 0)

+   goto skip_memalloc;
+
psp->cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);
if (!psp->cmd)
return -ENOMEM;
  
  	ret = amdgpu_bo_create_kernel(adev, PSP_1_MEG, PSP_1_MEG,

- AMDGPU_GEM_DOMAIN_GTT,
- &psp->fw_pri_bo,
- &psp->fw_pri_mc_addr,
- &psp->fw_pri_buf);
+   AMDGPU_GEM_DOMAIN_GTT,
+   &psp->fw_pri_bo,
+   &psp->fw_pri_mc_addr,
+   &psp->fw_pri_buf);
if (ret)
goto failed;
  
  	ret = amdgpu_bo_create_kernel(adev, PSP_FENCE_BUFFER_SIZE, PAGE_SIZE,

- AMDGPU_GEM_DOMAIN_VRAM,
- &psp->fence_buf_bo,
- &psp->fence_buf_mc_addr,
- &psp->fence_buf);
+   AMDGPU_GEM_DOMAIN_VRAM,
+   &psp->fence_buf_bo,
+   &psp->fence_buf_mc_addr,
+   &psp->fence_buf);
if (ret)
goto failed_mem2;
  
@@ -375,6 +378,7 @@ static int psp_load_fw(struct amdgpu_device *adev)

if (ret)
goto failed_mem;
  
+skip_memalloc:

ret = psp_hw_start(psp);
if (ret)
goto failed_mem;



___
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx