On Thu, Jun 29, 2017 at 03:34:57PM +0800, Michel Dänzer wrote: > On 29/06/17 04:03 PM, Huang Rui wrote: > > psp->cmd will be used on resume phase, so we can not free it on hw_init. > > Otherwise, a memory corruption will be triggered. > > > > Signed-off-by: Huang Rui <ray.huang at amd.com> > > --- > > > > Alex, Christian, > > > > This is the final fix for vega10 S3. The random memory corruption issue is > root > > caused. > > > > Thanks, > > Ray > > > > --- > > drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 8 ++++++-- > > 1 file changed, 6 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/ > amdgpu/amdgpu_psp.c > > index 5041073..fcdd542 100644 > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c > > @@ -372,8 +372,6 @@ static int psp_load_fw(struct amdgpu_device *adev) > > if (ret) > > goto failed_mem; > > > > - kfree(cmd); > > - > > return 0; > > This looks like a good catch. > > > > @@ -384,6 +382,7 @@ static int psp_load_fw(struct amdgpu_device *adev) > > &psp->fw_pri_mc_addr, &psp->fw_pri_buf); > > failed: > > kfree(cmd); > > + cmd = NULL; > > This should probably be > > psp->cmd = NULL; > > instead? > Actually, we set psp->cmd = cmd before. But anyway, we needn't "cmd" member any more. > > > @@ -443,6 +442,11 @@ static int psp_hw_fini(void *handle) > > amdgpu_bo_free_kernel(&psp->fence_buf_bo, > > &psp->fence_buf_mc_addr, &psp-> > fence_buf); > > > > + if (!psp->cmd) { > > + kfree(psp->cmd); > > + psp->cmd = NULL; > > + } > > This should probably be > > if (psp->cmd) { > > ? If so, you could skip the if altogether, since kfree(NULL) is safe. Nice catch. My typo. ;-) You're right. Will update it in V2. Thanks, Rui