aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2018-07-18 04:15:07 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2018-07-18 04:15:07 -0400
commit4d81b0f9e631f751bf231213893e202a51f76687 (patch)
tree36ba944af81582829c3c6e94c262afe285d94c46
parentf54ab690ad68e4c5a5b4d4b5dbb28a35018546c5 (diff)
cpufreq: pcc-cpufreq: Disable dynamic scaling on many-CPU systems
The firmware interface used by the pcc-cpufreq driver is fundamentally not scalable and using it for dynamic CPU performance scaling on systems with many CPUs leads to degraded performance. For this reason, disable dynamic CPU performance scaling on systems with pcc-cpufreq where the number of CPUs present at the driver init time is greater than 4. Also make the driver print corresponding complaints to the kernel log. Reported-by: Andreas Herrmann <aherrmann@suse.com> Tested-by: Andreas Herrmann <aherrmann@suse.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--drivers/cpufreq/pcc-cpufreq.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/cpufreq/pcc-cpufreq.c b/drivers/cpufreq/pcc-cpufreq.c
index 3f0ce2ae35ee..ef8d984178a5 100644
--- a/drivers/cpufreq/pcc-cpufreq.c
+++ b/drivers/cpufreq/pcc-cpufreq.c
@@ -589,6 +589,15 @@ static int __init pcc_cpufreq_init(void)
589 return ret; 589 return ret;
590 } 590 }
591 591
592 if (num_present_cpus() > 4) {
593 pcc_cpufreq_driver.flags |= CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING;
594 pr_err("%s: Too many CPUs, dynamic performance scaling disabled\n",
595 __func__);
596 pr_err("%s: Try to enable another scaling driver through BIOS settings\n",
597 __func__);
598 pr_err("%s: and complain to the system vendor\n", __func__);
599 }
600
592 ret = cpufreq_register_driver(&pcc_cpufreq_driver); 601 ret = cpufreq_register_driver(&pcc_cpufreq_driver);
593 602
594 return ret; 603 return ret;