[bug report] drm/amdgpu: Add support for CIK parts
Dan Carpenter
dan.carpenter at oracle.com
Tue Dec 13 10:34:17 UTC 2016
Hello Alex Deucher,
The patch a2e73f56fa62: "drm/amdgpu: Add support for CIK parts" from
Apr 20, 2015, leads to the following static checker warning:
drivers/gpu/drm/amd/amdgpu/ci_dpm.c:6293 ci_dpm_sw_init()
warn: 'adev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries' double freed
drivers/gpu/drm/amd/amdgpu/ci_dpm.c:6293 ci_dpm_sw_init()
warn: 'adev->pm.dpm.ps' double freed
drivers/gpu/drm/amd/amdgpu/ci_dpm.c
6274
6275 ret = ci_dpm_init_microcode(adev);
6276 if (ret)
6277 return ret;
6278
6279 INIT_WORK(&adev->pm.dpm.thermal.work, amdgpu_dpm_thermal_work_handler);
6280 mutex_lock(&adev->pm.mutex);
6281 ret = ci_dpm_init(adev);
ci_dpm_init() has built-in calls to ci_dpm_fini().
6282 if (ret)
6283 goto dpm_failed;
6284 adev->pm.dpm.current_ps = adev->pm.dpm.requested_ps = adev->pm.dpm.boot_ps;
6285 if (amdgpu_dpm == 1)
6286 amdgpu_pm_print_power_states(adev);
6287 mutex_unlock(&adev->pm.mutex);
6288 DRM_INFO("amdgpu: dpm initialized\n");
6289
6290 return 0;
6291
6292 dpm_failed:
6293 ci_dpm_fini(adev);
Then we call it again here. This style of error handling is a layering
violation and people think it makes the code so much simpler but it
really doesn't at all... :/ Just have every function unwind it's own
allocations, doing it that way basically writes a mirroring de-allocate
function for every allocator for no effort.
6294 mutex_unlock(&adev->pm.mutex);
6295 DRM_ERROR("amdgpu: dpm initialization failed\n");
6296 return ret;
6297 }
regards,
dan carpenter
More information about the dri-devel
mailing list