--- a/sys/dev/drm/amd/amdgpu/kv_dpm.c +++ b/sys/dev/drm/amd/amdgpu/kv_dpm.c @@ -2747,7 +2747,9 @@ &non_clock_info_array->nonClockInfo[non_clock_array_index]; ps = kzalloc(sizeof(struct kv_ps), GFP_KERNEL); if (ps == NULL) { - kfree(adev->pm.dpm.ps); + /* let kv_dpm_fini free the array and the + * already-parsed ps_priv states exactly once */ + adev->pm.dpm.num_ps = i; return -ENOMEM; } adev->pm.dpm.ps[i].ps_priv = ps;