diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c index 65d3f79104bd..40a8f9d86b59 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c @@ -3102,6 +3102,20 @@ static void intel_pstate_driver_cleanup(void) intel_pstate_driver = NULL; } +static void check_turbo_work_handler(struct work_struct *work) +{ + global.turbo_disabled = turbo_is_disabled(); + + if (global.turbo_disabled) + return; + + global.no_turbo = global.turbo_disabled; + intel_pstate_update_limits_for_all(); + arch_set_max_freq_ratio(false); +} + +DECLARE_DELAYED_WORK(turbo_work, check_turbo_work_handler); + static int intel_pstate_register_driver(struct cpufreq_driver *driver) { int ret; @@ -3114,6 +3128,9 @@ static int intel_pstate_register_driver(struct cpufreq_driver *driver) global.turbo_disabled = turbo_is_disabled(); global.no_turbo = global.turbo_disabled; + if (global.turbo_disabled) + schedule_delayed_work(&turbo_work, HZ); + arch_set_max_freq_ratio(global.turbo_disabled); intel_pstate_driver = driver;