| From 223957c3ac4af878a535580a08f299447ac70d71 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 20 Aug 2020 17:40:02 +0200 |
| Subject: cpufreq: intel_pstate: Refuse to turn off with HWP enabled |
| |
| From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| |
| [ Upstream commit 43298db3009f06fe5c69e1ca8b6cfc2565772fa1 ] |
| |
| After commit f6ebbcf08f37 ("cpufreq: intel_pstate: Implement passive |
| mode with HWP enabled") it is possible to change the driver status |
| to "off" via sysfs with HWP enabled, which effectively causes the |
| driver to unregister itself, but HWP remains active and it forces the |
| minimum performance, so even if another cpufreq driver is loaded, |
| it will not be able to control the CPU frequency. |
| |
| For this reason, make the driver refuse to change the status to |
| "off" with HWP enabled. |
| |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/cpufreq/intel_pstate.c | 12 +++++++++--- |
| 1 file changed, 9 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c |
| index 927eb3fd23660..5bad88f6ddd59 100644 |
| --- a/drivers/cpufreq/intel_pstate.c |
| +++ b/drivers/cpufreq/intel_pstate.c |
| @@ -2533,9 +2533,15 @@ static int intel_pstate_update_status(const char *buf, size_t size) |
| { |
| int ret; |
| |
| - if (size == 3 && !strncmp(buf, "off", size)) |
| - return intel_pstate_driver ? |
| - intel_pstate_unregister_driver() : -EINVAL; |
| + if (size == 3 && !strncmp(buf, "off", size)) { |
| + if (!intel_pstate_driver) |
| + return -EINVAL; |
| + |
| + if (hwp_active) |
| + return -EBUSY; |
| + |
| + return intel_pstate_unregister_driver(); |
| + } |
| |
| if (size == 6 && !strncmp(buf, "active", size)) { |
| if (intel_pstate_driver) { |
| -- |
| 2.25.1 |
| |