forked from LineageOS/android_kernel_xiaomi_cancro
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmin
112 lines (112 loc) · 4.88 KB
/
min
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
if ((policy) && (policy->cpu == freqs->cpu) &&
(policy->cur) && (policy->cur != freqs->old)) {
freqs->old, policy->cur);
freqs->old = policy->cur;
if (likely(policy) && likely(policy->cpu == freqs->cpu)) {
policy->cur = freqs->new;
sysfs_notify(&policy->kobj, NULL, "scaling_cur_freq");
for_each_cpu(freqs->cpu, policy->cpus)
policy->util = util;
if (policy->util >= MIN_CPU_UTIL_NOTIFY)
sysfs_notify(&policy->kobj, NULL, "cpu_utilization");
return sprintf(buf, "%u\n", policy->object); \
ret = cpufreq_get_policy(&new_policy, policy->cpu); \
policy->user_policy.object = new_policy.object; \
unsigned int cur_freq = __cpufreq_get(policy->cpu);
if (policy->policy == CPUFREQ_POLICY_POWERSAVE)
else if (policy->policy == CPUFREQ_POLICY_PERFORMANCE)
else if (policy->governor)
policy->governor->name);
ret = cpufreq_get_policy(&new_policy, policy->cpu);
policy->user_policy.policy = policy->policy;
policy->user_policy.governor = policy->governor;
sysfs_notify(&policy->kobj, NULL, "scaling_governor");
return show_cpus(policy->related_cpus, buf);
return show_cpus(policy->cpus, buf);
if (!policy->governor || !policy->governor->store_setspeed)
policy->governor->store_setspeed(policy, freq);
if (!policy->governor || !policy->governor->show_setspeed)
return policy->governor->show_setspeed(policy, buf);
ret = cpufreq_driver->bios_limit(policy->cpu, &limit);
return sprintf(buf, "%u\n", policy->cpuinfo.max_freq);
policy = cpufreq_cpu_get_sysfs(policy->cpu);
if (lock_policy_rwsem_read(policy->cpu) < 0)
unlock_policy_rwsem_read(policy->cpu);
policy = cpufreq_cpu_get_sysfs(policy->cpu);
if (lock_policy_rwsem_write(policy->cpu) < 0)
unlock_policy_rwsem_write(policy->cpu);
complete(&policy->kobj_unregister);
for_each_cpu(j, policy->cpus) {
ret = sysfs_create_link(&cpu_dev->kobj, &policy->kobj,
ret = kobject_init_and_add(&policy->kobj, &ktype_cpufreq,
ret = sysfs_create_file(&policy->kobj, &((*drv_attr)->attr));
ret = sysfs_create_file(&policy->kobj, &cpuinfo_cur_freq.attr);
ret = sysfs_create_file(&policy->kobj, &scaling_cur_freq.attr);
ret = sysfs_create_file(&policy->kobj, &bios_limit.attr);
for_each_cpu(j, policy->cpus) {
per_cpu(cpufreq_policy_cpu, j) = policy->cpu;
policy->governor = NULL;
policy->user_policy.policy = policy->policy;
policy->user_policy.governor = policy->governor;
kobject_put(&policy->kobj);
wait_for_completion(&policy->kobj_unregister);
per_cpu(cpufreq_policy_cpu, cpu) = policy->cpu;
cpumask_set_cpu(cpu, policy->cpus);
ret = sysfs_create_link(&dev->kobj, &policy->kobj, "cpufreq");
if (!alloc_cpumask_var(&policy->cpus, GFP_KERNEL))
if (!zalloc_cpumask_var(&policy->related_cpus, GFP_KERNEL))
policy->cpu = cpu;
cpumask_copy(policy->cpus, cpumask_of(cpu));
init_completion(&policy->kobj_unregister);
INIT_WORK(&policy->update, handle_update);
policy->governor = cp->governor;
policy->governor = CPUFREQ_DEFAULT_GOVERNOR;
/* related cpus should atleast have policy->cpus */
cpumask_or(policy->related_cpus, policy->related_cpus, policy->cpus);
cpumask_and(policy->cpus, policy->cpus, cpu_online_mask);
policy->user_policy.min = policy->min;
policy->user_policy.max = policy->max;
policy->governor = gov;
policy->governor->name, cpu);
kobject_uevent(&policy->kobj, KOBJ_ADD);
for_each_cpu(j, policy->cpus)
kobject_put(&policy->kobj);
wait_for_completion(&policy->kobj_unregister);
free_cpumask_var(policy->related_cpus);
free_cpumask_var(policy->cpus);
unsigned int cpu = policy->cpu;
* cpufreq_quick_get - get the CPU frequency (in kHz) from policy->cur
ret_freq = policy->cur;
ret_freq = policy->max;
if (ret_freq && policy->cur &&
if (unlikely(ret_freq != policy->cur)) {
cpufreq_out_of_sync(cpu, policy->cur, ret_freq);
schedule_work(&policy->update);
"step on CPU %u\n", cpu_policy->cpu);
"step on CPU %u\n", cpu_policy->cpu);
schedule_work(&cpu_policy->update);
pr_debug("target for CPU %u: %u kHz, relation %u\n", policy->cpu,
policy = cpufreq_cpu_get(policy->cpu);
if (unlikely(lock_policy_rwsem_write(policy->cpu)))
unlock_policy_rwsem_write(policy->cpu);
policy = cpufreq_cpu_get(policy->cpu);
if (policy->governor->max_transition_latency &&
policy->cpuinfo.transition_latency >
policy->governor->max_transition_latency) {
policy->governor->name,
policy->governor = gov;
if (!try_module_get(policy->governor->owner))
policy->cpu, event);
ret = policy->governor->governor(policy, event);
module_put(policy->governor->owner);
module_put(policy->governor->owner);
pr_debug("setting new policy for CPU %u: %u - %u kHz\n", policy->cpu,
policy->min, policy->max);
memcpy(&policy->cpuinfo, &data->cpuinfo,
if (policy->min > data->user_policy.max
|| policy->max < data->user_policy.min) {
data->min = policy->min;
data->max = policy->max;
data->policy = policy->policy;
if (policy->governor != data->governor) {
data->governor = policy->governor;