Lines Matching +full:cpu +full:- +full:offset
26 static DEFINE_SPINLOCK(task_time_in_state_lock); /* task->time_in_state */
29 * struct cpu_freqs - per-cpu frequency information
30 * @offset: start of these freqs' stats in task time_in_state array
36 unsigned int offset; member
51 p->time_in_state = NULL; in cpufreq_task_times_init()
53 p->max_state = 0; in cpufreq_task_times_init()
63 temp = kcalloc(max_state, sizeof(p->time_in_state[0]), GFP_ATOMIC); in cpufreq_task_times_alloc()
68 p->time_in_state = temp; in cpufreq_task_times_alloc()
70 p->max_state = max_state; in cpufreq_task_times_alloc()
79 temp = krealloc(p->time_in_state, max_state * sizeof(u64), GFP_ATOMIC); in cpufreq_task_times_realloc_locked()
81 return -ENOMEM; in cpufreq_task_times_realloc_locked()
82 p->time_in_state = temp; in cpufreq_task_times_realloc_locked()
83 memset(p->time_in_state + p->max_state, 0, in cpufreq_task_times_realloc_locked()
84 (max_state - p->max_state) * sizeof(u64)); in cpufreq_task_times_realloc_locked()
85 p->max_state = max_state; in cpufreq_task_times_realloc_locked()
94 if (!p->time_in_state) in cpufreq_task_times_exit()
98 temp = p->time_in_state; in cpufreq_task_times_exit()
99 p->time_in_state = NULL; in cpufreq_task_times_exit()
107 unsigned int cpu, i; in proc_time_in_state_show() local
114 for_each_possible_cpu(cpu) { in proc_time_in_state_show()
115 freqs = all_freqs[cpu]; in proc_time_in_state_show()
120 seq_printf(m, "cpu%u\n", cpu); in proc_time_in_state_show()
121 for (i = 0; i < freqs->max_state; i++) { in proc_time_in_state_show()
123 if (freqs->offset + i < p->max_state && in proc_time_in_state_show()
124 p->time_in_state) in proc_time_in_state_show()
125 cputime = p->time_in_state[freqs->offset + i]; in proc_time_in_state_show()
126 seq_printf(m, "%u %lu\n", freqs->freq_table[i], in proc_time_in_state_show()
140 if (!freqs || is_idle_task(p) || p->flags & PF_EXITING) in cpufreq_acct_update_power()
143 state = freqs->offset + READ_ONCE(freqs->last_index); in cpufreq_acct_update_power()
146 if ((state < p->max_state || !cpufreq_task_times_realloc_locked(p)) && in cpufreq_acct_update_power()
147 p->time_in_state) in cpufreq_acct_update_power()
148 p->time_in_state[state] += cputime; in cpufreq_acct_update_power()
157 for (index = 0; index < freqs->max_state; ++index) { in cpufreq_times_get_index()
158 if (freqs->freq_table[index] == freq) in cpufreq_times_get_index()
161 return -1; in cpufreq_times_get_index()
166 int cpu, index = 0; in cpufreq_times_create_policy() local
172 if (all_freqs[policy->cpu]) in cpufreq_times_create_policy()
175 table = policy->freq_table; in cpufreq_times_create_policy()
182 tmp = kzalloc(sizeof(*freqs) + sizeof(freqs->freq_table[0]) * count, in cpufreq_times_create_policy()
188 freqs->max_state = count; in cpufreq_times_create_policy()
191 freqs->freq_table[index++] = pos->frequency; in cpufreq_times_create_policy()
193 index = cpufreq_times_get_index(freqs, policy->cur); in cpufreq_times_create_policy()
195 WRITE_ONCE(freqs->last_index, index); in cpufreq_times_create_policy()
197 freqs->offset = next_offset; in cpufreq_times_create_policy()
198 WRITE_ONCE(next_offset, freqs->offset + count); in cpufreq_times_create_policy()
199 for_each_cpu(cpu, policy->related_cpus) in cpufreq_times_create_policy()
200 all_freqs[cpu] = freqs; in cpufreq_times_create_policy()
207 struct cpu_freqs *freqs = all_freqs[policy->cpu]; in cpufreq_times_record_transition()
213 WRITE_ONCE(freqs->last_index, index); in cpufreq_times_record_transition()