Commit 6961750f authored by Evan Quan's avatar Evan Quan Committed by Alex Deucher

drm/amd/powerplay: use work queue to perform throttling logging

As IO operations(access to SMU internals) and possible sleep are
involved in throttling logging. Workqueue can handle them well.
Otherwise we may hit "scheduling while atomic" error.
Signed-off-by: default avatarEvan Quan <evan.quan@amd.com>
Acked-by: default avatarNirmoy Das <nirmoy.das@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 9b1a6a58
......@@ -1034,6 +1034,14 @@ static int smu_smc_table_sw_fini(struct smu_context *smu)
return 0;
}
static void smu_throttling_logging_work_fn(struct work_struct *work)
{
struct smu_context *smu = container_of(work, struct smu_context,
throttling_logging_work);
smu_log_thermal_throttling(smu);
}
static int smu_sw_init(void *handle)
{
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
......@@ -1055,6 +1063,7 @@ static int smu_sw_init(void *handle)
mutex_init(&smu->metrics_lock);
mutex_init(&smu->message_lock);
INIT_WORK(&smu->throttling_logging_work, smu_throttling_logging_work_fn);
smu->watermarks_bitmap = 0;
smu->power_profile_mode = PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT;
smu->default_power_profile_mode = PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT;
......@@ -1372,6 +1381,8 @@ static int smu_smc_hw_cleanup(struct smu_context *smu)
smu_i2c_eeprom_fini(smu, &adev->pm.smu_i2c);
cancel_work_sync(&smu->throttling_logging_work);
ret = smu_disable_thermal_alert(smu);
if (ret) {
pr_warn("Fail to stop thermal control!\n");
......
......@@ -411,6 +411,8 @@ struct smu_context
bool uploading_custom_pp_table;
bool dc_controlled_by_gpio;
struct work_struct throttling_logging_work;
};
struct i2c_adapter;
......
......@@ -1605,7 +1605,7 @@ static int smu_v11_0_irq_process(struct amdgpu_device *adev,
return 0;
if (__ratelimit(&adev->throttling_logging_rs))
smu_log_thermal_throttling(smu);
schedule_work(&smu->throttling_logging_work);
break;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment