DF-3620 / fix.diff
--- a/sys/dev/drm/amd/amdgpu/ci_dpm.c +++ b/sys/dev/drm/amd/amdgpu/ci_dpm.c @@ -2476,6 +2476,9 @@ static int ci_get_std_voltage_value_sidd if (adev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries == NULL) return -EINVAL; + if (adev->pm.dpm.dyn_state.cac_leakage_table.entries && + adev->pm.dpm.dyn_state.cac_leakage_table.count == 0) + return -EINVAL; + if (adev->pm.dpm.dyn_state.cac_leakage_table.entries) { for (v_index = 0; (u32)v_index < adev->pm.dpm.dyn_state.vddc_dependency_on_sclk.count; v_index++) { if (voltage_table->value == --- a/sys/dev/drm/amd/amdgpu/amdgpu_dpm.c +++ b/sys/dev/drm/amd/amdgpu/amdgpu_dpm.c @@ -499,7 +499,8 @@ int amdgpu_parse_extended_power_table(st ATOM_PPLIB_CAC_Leakage_Record *entry; u32 size = cac_table->ucNumEntries * sizeof(struct amdgpu_cac_leakage_table); adev->pm.dpm.dyn_state.cac_leakage_table.entries = kzalloc(size, GFP_KERNEL); - if (!adev->pm.dpm.dyn_state.cac_leakage_table.entries) { + if (cac_table->ucNumEntries == 0 || + !adev->pm.dpm.dyn_state.cac_leakage_table.entries) { amdgpu_free_extended_power_table(adev); return -ENOMEM; } |