Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: fix pplib finish bug

1,should use late_fini to kfree all resource otherwise
the released pointer maybe accessed in IRQ ip fini routine.

2,hwmgr should not be kfree by pem_fini which is invoked
by hw fini path.

Signed-off-by: Monk Liu <Monk.Liu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Monk Liu and committed by
Alex Deucher
a6dcfd9c 482587e3

+5 -10
+5
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
··· 1325 1325 adev->ip_block_status[i].valid = false; 1326 1326 } 1327 1327 1328 + for (i = adev->num_ip_blocks - 1; i >= 0; i--) { 1329 + if (adev->ip_blocks[i].funcs->late_fini) 1330 + adev->ip_blocks[i].funcs->late_fini((void *)adev); 1331 + } 1332 + 1328 1333 return 0; 1329 1334 } 1330 1335
-7
drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c
··· 183 183 if (ret) 184 184 return ret; 185 185 186 - #ifdef CONFIG_DRM_AMD_POWERPLAY 187 - if (adev->pp_enabled) { 188 - amdgpu_pm_sysfs_fini(adev); 189 - amd_powerplay_fini(adev->powerplay.pp_handle); 190 - } 191 - #endif 192 - 193 186 return ret; 194 187 } 195 188
-3
drivers/gpu/drm/amd/powerplay/eventmgr/eventmgr.c
··· 58 58 pem_unregister_interrupts(eventmgr); 59 59 60 60 pem_handle_event(eventmgr, AMD_PP_EVENT_UNINITIALIZE, &event_data); 61 - 62 - if (eventmgr != NULL) 63 - kfree(eventmgr); 64 61 } 65 62 66 63 int eventmgr_init(struct pp_instance *handle)