mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 20:53:53 +08:00
Power management fixes for v4.13-rc6
- Disable interrupts around reading IA32_APERF and IA32_MPERF in aperfmperf_snapshot_khz() (introduced recently) to avoid excessive delays between the reads that may result from interrupt handling (Doug Smythies). - Fix the comutation of the CPU frequency to be reported through the pstate_sample tracepoint in intel_pstate (Doug Smythies). -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJZlfwDAAoJEILEb/54YlRxNz0P/2qaLU/vTk2Ide5A0LNxHPRx kv7kD8HQ37yWMR787FCDihrJqXd9oY5nnrBosolHhaSO0aEn3RwFwWWmZJXVSS9O VB7zSDoxs5p4q+1lDz9nN0I5eu1+6b5Z4kLeEl5qJuJbc36o1wJ4fkg29M9pnoM0 C85M/yrAN+WZMqsqjjTYObJb4NKQw3iIkF1oQW3mM1wM9YZFh4brMjvFGZ97XxjK GJyTgfm580cPQ2aMIYIffXkhLk3LhNRto+fkpWZ4togzutJSbCtA16sKlRVdtrof uGOcP4/dgmR3futM8mG7j6ovz+XvbxKeYcSs5BPh7klvCgwLY/Np+uV582mNrLWT UabL5+Jvwx4zFgS2m/jhZB/6rTs6h4jAmfBpCBlabAX6ppKAr74uH20dAoKePhHm qKa++7xVQBFwmHHsUXesW8QYSaEH37pwj+zUWyw1e+Dt+VvYDWRC5R2nugtOw8zV s6yONCd7HdfqCSpig1eA175E3IUAsFD5s1HXnuGVUAGjnPDiXvwtSZa5fdoDKHVo COZ0hV87z4+VtRF3/87xbJtFsAhz3byapIBrQ3QGAjfYhQ8D6fC1lA9OAqXEVETF 1A14FnHJprqIpTUwXAWEBco6eez8/W2j9KomltNCnsyeZlcV6hy6nO4keRqFKCn0 sRyj93X6N6HlUE+rWQxE =mtB4 -----END PGP SIGNATURE----- Merge tag 'pm-4.13-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm Pull power management fixes from Rafael Wysocki: "These fix two issues related to exposing the current CPU frequency to user space on x86. Specifics: - Disable interrupts around reading IA32_APERF and IA32_MPERF in aperfmperf_snapshot_khz() (introduced recently) to avoid excessive delays between the reads that may result from interrupt handling (Doug Smythies). - Fix the computation of the CPU frequency to be reported through the pstate_sample tracepoint in intel_pstate (Doug Smythies)" * tag 'pm-4.13-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: cpufreq: x86: Disable interrupts during MSRs reading cpufreq: intel_pstate: report correct CPU frequencies during trace
This commit is contained in:
commit
d33a2a9143
@ -40,13 +40,16 @@ static void aperfmperf_snapshot_khz(void *dummy)
|
|||||||
struct aperfmperf_sample *s = this_cpu_ptr(&samples);
|
struct aperfmperf_sample *s = this_cpu_ptr(&samples);
|
||||||
ktime_t now = ktime_get();
|
ktime_t now = ktime_get();
|
||||||
s64 time_delta = ktime_ms_delta(now, s->time);
|
s64 time_delta = ktime_ms_delta(now, s->time);
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
/* Don't bother re-computing within the cache threshold time. */
|
/* Don't bother re-computing within the cache threshold time. */
|
||||||
if (time_delta < APERFMPERF_CACHE_THRESHOLD_MS)
|
if (time_delta < APERFMPERF_CACHE_THRESHOLD_MS)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
local_irq_save(flags);
|
||||||
rdmsrl(MSR_IA32_APERF, aperf);
|
rdmsrl(MSR_IA32_APERF, aperf);
|
||||||
rdmsrl(MSR_IA32_MPERF, mperf);
|
rdmsrl(MSR_IA32_MPERF, mperf);
|
||||||
|
local_irq_restore(flags);
|
||||||
|
|
||||||
aperf_delta = aperf - s->aperf;
|
aperf_delta = aperf - s->aperf;
|
||||||
mperf_delta = mperf - s->mperf;
|
mperf_delta = mperf - s->mperf;
|
||||||
|
@ -1613,8 +1613,7 @@ static inline bool intel_pstate_sample(struct cpudata *cpu, u64 time)
|
|||||||
|
|
||||||
static inline int32_t get_avg_frequency(struct cpudata *cpu)
|
static inline int32_t get_avg_frequency(struct cpudata *cpu)
|
||||||
{
|
{
|
||||||
return mul_ext_fp(cpu->sample.core_avg_perf,
|
return mul_ext_fp(cpu->sample.core_avg_perf, cpu_khz);
|
||||||
cpu->pstate.max_pstate_physical * cpu->pstate.scaling);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int32_t get_avg_pstate(struct cpudata *cpu)
|
static inline int32_t get_avg_pstate(struct cpudata *cpu)
|
||||||
|
Loading…
Reference in New Issue
Block a user