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-4.7-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull power management fixes from Rafael Wysocki:
"Three cpufreq fixes, one in the core (stable-candidate) and two in
drivers (intel_pstate and cpufreq-dt).

Specifics:

- Fix a recent intel_pstate regression that caused the number of
wakeups to increase significantly on an idle system in some cases
due to excessive synchronize_sched() invocations (Rafael Wysocki).

- Fix unnecessary invocations of WARN_ON() in the cpufreq core after
cpufreq has been suspended introduced during the 4.6 cycla (Rafael
Wysocki).

- Fix an error code path in the cpufreq-dt-platdev driver that
forgets to drop a reference to a DT node (Masahiro Yamada)"

* tag 'pm-4.7-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
cpufreq: Avoid false-positive WARN_ON()s in cpufreq_update_policy()
cpufreq: dt: call of_node_put() before error out
intel_pstate: Do not clear utilization update hooks on policy changes

+11 -5
+4 -3
drivers/cpufreq/cpufreq-dt-platdev.c
··· 79 79 static int __init cpufreq_dt_platdev_init(void) 80 80 { 81 81 struct device_node *np = of_find_node_by_path("/"); 82 + const struct of_device_id *match; 82 83 83 84 if (!np) 84 85 return -ENODEV; 85 86 86 - if (!of_match_node(machines, np)) 87 + match = of_match_node(machines, np); 88 + of_node_put(np); 89 + if (!match) 87 90 return -ENODEV; 88 - 89 - of_node_put(of_root); 90 91 91 92 return PTR_ERR_OR_ZERO(platform_device_register_simple("cpufreq-dt", -1, 92 93 NULL, 0));
+4
drivers/cpufreq/cpufreq.c
··· 2261 2261 * -> ask driver for current freq and notify governors about a change 2262 2262 */ 2263 2263 if (cpufreq_driver->get && !cpufreq_driver->setpolicy) { 2264 + if (cpufreq_suspended) { 2265 + ret = -EAGAIN; 2266 + goto unlock; 2267 + } 2264 2268 new_policy.cur = cpufreq_update_current_freq(policy); 2265 2269 if (WARN_ON(!new_policy.cur)) { 2266 2270 ret = -EIO;
+3 -2
drivers/cpufreq/intel_pstate.c
··· 1400 1400 { 1401 1401 struct cpudata *cpu = all_cpu_data[cpu_num]; 1402 1402 1403 + if (cpu->update_util_set) 1404 + return; 1405 + 1403 1406 /* Prevent intel_pstate_update_util() from using stale data. */ 1404 1407 cpu->sample.time = 0; 1405 1408 cpufreq_add_update_util_hook(cpu_num, &cpu->update_util, ··· 1442 1439 1443 1440 if (!policy->cpuinfo.max_freq) 1444 1441 return -ENODEV; 1445 - 1446 - intel_pstate_clear_update_util_hook(policy->cpu); 1447 1442 1448 1443 pr_debug("set_policy cpuinfo.max %u policy->max %u\n", 1449 1444 policy->cpuinfo.max_freq, policy->max);