Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'pm+acpi-4.4-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull more power management and ACPI fixes from Rafael Wysocki:
"These fix one recent regression (cpufreq core), fix up two features
added recently (ACPI CPPC support, SCPI support in the arm_big_little
cpufreq driver) and fix three older bugs in the intel_pstate driver.

Specifics:

- Fix a recent regression in the cpufreq core causing it to fail to
clean up sysfs directories properly on cpufreq driver removal
(Viresh Kumar).

- Fix a build problem in the SCPI support code recently added to the
arm_big_little cpufreq driver (Punit Agrawal).

- Fix up the recently added CPPC cpufreq frontend to process the CPU
coordination information provided by the platform firmware
correctly (Ashwin Chaugule).

- Fix the intel_pstate driver to behave as intended when switched
over to the "performance" mode via sysfs if hardware-driven P-state
selection (HWP) is enabled (Alexandra Yates).

- Fix two rounding errors in the intel_pstate driver that sometimes
cause it to use lower P-states than requested (Prarit Bhargava)"

* tag 'pm+acpi-4.4-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
intel_pstate: Fix "performance" mode behavior with HWP enabled
cpufreq: SCPI: Depend on SCPI clk driver
cpufreq: intel_pstate: Fix limits->max_perf rounding error
cpufreq: intel_pstate: Fix limits->max_policy_pct rounding error
cpufreq: Always remove sysfs cpuX/cpufreq link on ->remove_dev()
cpufreq: CPPC: Initialize and check CPUFreq CPU co-ord type correctly

+11 -9
+1 -1
drivers/cpufreq/Kconfig.arm
··· 202 202 203 203 config ARM_SCPI_CPUFREQ 204 204 tristate "SCPI based CPUfreq driver" 205 - depends on ARM_BIG_LITTLE_CPUFREQ && ARM_SCPI_PROTOCOL 205 + depends on ARM_BIG_LITTLE_CPUFREQ && ARM_SCPI_PROTOCOL && COMMON_CLK_SCPI 206 206 help 207 207 This adds the CPUfreq driver support for ARM big.LITTLE platforms 208 208 using SCPI protocol for CPU power management.
+2 -1
drivers/cpufreq/cppc_cpufreq.c
··· 98 98 policy->max = cpu->perf_caps.highest_perf; 99 99 policy->cpuinfo.min_freq = policy->min; 100 100 policy->cpuinfo.max_freq = policy->max; 101 + policy->shared_type = cpu->shared_type; 101 102 102 103 if (policy->shared_type == CPUFREQ_SHARED_TYPE_ANY) 103 104 cpumask_copy(policy->cpus, cpu->shared_cpu_map); 104 - else { 105 + else if (policy->shared_type == CPUFREQ_SHARED_TYPE_ALL) { 105 106 /* Support only SW_ANY for now. */ 106 107 pr_debug("Unsupported CPU co-ord type\n"); 107 108 return -EFAULT;
+3 -6
drivers/cpufreq/cpufreq.c
··· 1401 1401 } 1402 1402 1403 1403 cpumask_clear_cpu(cpu, policy->real_cpus); 1404 - 1405 - if (cpumask_empty(policy->real_cpus)) { 1406 - cpufreq_policy_free(policy, true); 1407 - return; 1408 - } 1409 - 1410 1404 remove_cpu_dev_symlink(policy, cpu); 1405 + 1406 + if (cpumask_empty(policy->real_cpus)) 1407 + cpufreq_policy_free(policy, true); 1411 1408 } 1412 1409 1413 1410 static void handle_update(struct work_struct *work)
+5 -1
drivers/cpufreq/intel_pstate.c
··· 1101 1101 policy->max >= policy->cpuinfo.max_freq) { 1102 1102 pr_debug("intel_pstate: set performance\n"); 1103 1103 limits = &performance_limits; 1104 + if (hwp_active) 1105 + intel_pstate_hwp_set(); 1104 1106 return 0; 1105 1107 } 1106 1108 ··· 1110 1108 limits = &powersave_limits; 1111 1109 limits->min_policy_pct = (policy->min * 100) / policy->cpuinfo.max_freq; 1112 1110 limits->min_policy_pct = clamp_t(int, limits->min_policy_pct, 0 , 100); 1113 - limits->max_policy_pct = (policy->max * 100) / policy->cpuinfo.max_freq; 1111 + limits->max_policy_pct = DIV_ROUND_UP(policy->max * 100, 1112 + policy->cpuinfo.max_freq); 1114 1113 limits->max_policy_pct = clamp_t(int, limits->max_policy_pct, 0 , 100); 1115 1114 1116 1115 /* Normalize user input to [min_policy_pct, max_policy_pct] */ ··· 1123 1120 limits->max_sysfs_pct); 1124 1121 limits->max_perf_pct = max(limits->min_policy_pct, 1125 1122 limits->max_perf_pct); 1123 + limits->max_perf = round_up(limits->max_perf, 8); 1126 1124 1127 1125 /* Make sure min_perf_pct <= max_perf_pct */ 1128 1126 limits->min_perf_pct = min(limits->max_perf_pct, limits->min_perf_pct);