xref: /openbmc/linux/kernel/sched/cpufreq_schedutil.c (revision e33bbe69149b802c0c77bfb822685772f85388ca)
1 /*
2  * CPUFreq governor based on scheduler-provided CPU utilization data.
3  *
4  * Copyright (C) 2016, Intel Corporation
5  * Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  */
11 
12 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
13 
14 #include "sched.h"
15 
16 #include <trace/events/power.h>
17 
18 struct sugov_tunables {
19 	struct gov_attr_set	attr_set;
20 	unsigned int		rate_limit_us;
21 };
22 
23 struct sugov_policy {
24 	struct cpufreq_policy	*policy;
25 
26 	struct sugov_tunables	*tunables;
27 	struct list_head	tunables_hook;
28 
29 	raw_spinlock_t		update_lock;	/* For shared policies */
30 	u64			last_freq_update_time;
31 	s64			freq_update_delay_ns;
32 	unsigned int		next_freq;
33 	unsigned int		cached_raw_freq;
34 
35 	/* The next fields are only needed if fast switch cannot be used: */
36 	struct			irq_work irq_work;
37 	struct			kthread_work work;
38 	struct			mutex work_lock;
39 	struct			kthread_worker worker;
40 	struct task_struct	*thread;
41 	bool			work_in_progress;
42 
43 	bool			need_freq_update;
44 };
45 
46 struct sugov_cpu {
47 	struct update_util_data	update_util;
48 	struct sugov_policy	*sg_policy;
49 	unsigned int		cpu;
50 
51 	bool			iowait_boost_pending;
52 	unsigned int		iowait_boost;
53 	unsigned int		iowait_boost_max;
54 	u64 last_update;
55 
56 	/* The fields below are only needed when sharing a policy: */
57 	unsigned long		util_cfs;
58 	unsigned long		util_dl;
59 	unsigned long		max;
60 
61 	/* The field below is for single-CPU policies only: */
62 #ifdef CONFIG_NO_HZ_COMMON
63 	unsigned long		saved_idle_calls;
64 #endif
65 };
66 
67 static DEFINE_PER_CPU(struct sugov_cpu, sugov_cpu);
68 
69 /************************ Governor internals ***********************/
70 
71 static bool sugov_should_update_freq(struct sugov_policy *sg_policy, u64 time)
72 {
73 	s64 delta_ns;
74 
75 	/*
76 	 * Since cpufreq_update_util() is called with rq->lock held for
77 	 * the @target_cpu, our per-CPU data is fully serialized.
78 	 *
79 	 * However, drivers cannot in general deal with cross-CPU
80 	 * requests, so while get_next_freq() will work, our
81 	 * sugov_update_commit() call may not for the fast switching platforms.
82 	 *
83 	 * Hence stop here for remote requests if they aren't supported
84 	 * by the hardware, as calculating the frequency is pointless if
85 	 * we cannot in fact act on it.
86 	 *
87 	 * For the slow switching platforms, the kthread is always scheduled on
88 	 * the right set of CPUs and any CPU can find the next frequency and
89 	 * schedule the kthread.
90 	 */
91 	if (sg_policy->policy->fast_switch_enabled &&
92 	    !cpufreq_can_do_remote_dvfs(sg_policy->policy))
93 		return false;
94 
95 	if (sg_policy->work_in_progress)
96 		return false;
97 
98 	if (unlikely(sg_policy->need_freq_update)) {
99 		sg_policy->need_freq_update = false;
100 		/*
101 		 * This happens when limits change, so forget the previous
102 		 * next_freq value and force an update.
103 		 */
104 		sg_policy->next_freq = UINT_MAX;
105 		return true;
106 	}
107 
108 	delta_ns = time - sg_policy->last_freq_update_time;
109 
110 	return delta_ns >= sg_policy->freq_update_delay_ns;
111 }
112 
113 static void sugov_update_commit(struct sugov_policy *sg_policy, u64 time,
114 				unsigned int next_freq)
115 {
116 	struct cpufreq_policy *policy = sg_policy->policy;
117 
118 	if (sg_policy->next_freq == next_freq)
119 		return;
120 
121 	sg_policy->next_freq = next_freq;
122 	sg_policy->last_freq_update_time = time;
123 
124 	if (policy->fast_switch_enabled) {
125 		next_freq = cpufreq_driver_fast_switch(policy, next_freq);
126 		if (!next_freq)
127 			return;
128 
129 		policy->cur = next_freq;
130 		trace_cpu_frequency(next_freq, smp_processor_id());
131 	} else {
132 		sg_policy->work_in_progress = true;
133 		irq_work_queue(&sg_policy->irq_work);
134 	}
135 }
136 
137 /**
138  * get_next_freq - Compute a new frequency for a given cpufreq policy.
139  * @sg_policy: schedutil policy object to compute the new frequency for.
140  * @util: Current CPU utilization.
141  * @max: CPU capacity.
142  *
143  * If the utilization is frequency-invariant, choose the new frequency to be
144  * proportional to it, that is
145  *
146  * next_freq = C * max_freq * util / max
147  *
148  * Otherwise, approximate the would-be frequency-invariant utilization by
149  * util_raw * (curr_freq / max_freq) which leads to
150  *
151  * next_freq = C * curr_freq * util_raw / max
152  *
153  * Take C = 1.25 for the frequency tipping point at (util / max) = 0.8.
154  *
155  * The lowest driver-supported frequency which is equal or greater than the raw
156  * next_freq (as calculated above) is returned, subject to policy min/max and
157  * cpufreq driver limitations.
158  */
159 static unsigned int get_next_freq(struct sugov_policy *sg_policy,
160 				  unsigned long util, unsigned long max)
161 {
162 	struct cpufreq_policy *policy = sg_policy->policy;
163 	unsigned int freq = arch_scale_freq_invariant() ?
164 				policy->cpuinfo.max_freq : policy->cur;
165 
166 	freq = (freq + (freq >> 2)) * util / max;
167 
168 	if (freq == sg_policy->cached_raw_freq && sg_policy->next_freq != UINT_MAX)
169 		return sg_policy->next_freq;
170 	sg_policy->cached_raw_freq = freq;
171 	return cpufreq_driver_resolve_freq(policy, freq);
172 }
173 
174 static void sugov_get_util(struct sugov_cpu *sg_cpu)
175 {
176 	struct rq *rq = cpu_rq(sg_cpu->cpu);
177 
178 	sg_cpu->max = arch_scale_cpu_capacity(NULL, sg_cpu->cpu);
179 	sg_cpu->util_cfs = cpu_util_cfs(rq);
180 	sg_cpu->util_dl  = cpu_util_dl(rq);
181 }
182 
183 static unsigned long sugov_aggregate_util(struct sugov_cpu *sg_cpu)
184 {
185 	struct rq *rq = cpu_rq(sg_cpu->cpu);
186 	unsigned long util;
187 
188 	if (rq->rt.rt_nr_running) {
189 		util = sg_cpu->max;
190 	} else {
191 		util = sg_cpu->util_dl;
192 		if (rq->cfs.h_nr_running)
193 			util += sg_cpu->util_cfs;
194 	}
195 
196 	/*
197 	 * Ideally we would like to set util_dl as min/guaranteed freq and
198 	 * util_cfs + util_dl as requested freq. However, cpufreq is not yet
199 	 * ready for such an interface. So, we only do the latter for now.
200 	 */
201 	return min(util, sg_cpu->max);
202 }
203 
204 static void sugov_set_iowait_boost(struct sugov_cpu *sg_cpu, u64 time, unsigned int flags)
205 {
206 	if (flags & SCHED_CPUFREQ_IOWAIT) {
207 		if (sg_cpu->iowait_boost_pending)
208 			return;
209 
210 		sg_cpu->iowait_boost_pending = true;
211 
212 		if (sg_cpu->iowait_boost) {
213 			sg_cpu->iowait_boost <<= 1;
214 			if (sg_cpu->iowait_boost > sg_cpu->iowait_boost_max)
215 				sg_cpu->iowait_boost = sg_cpu->iowait_boost_max;
216 		} else {
217 			sg_cpu->iowait_boost = sg_cpu->sg_policy->policy->min;
218 		}
219 	} else if (sg_cpu->iowait_boost) {
220 		s64 delta_ns = time - sg_cpu->last_update;
221 
222 		/* Clear iowait_boost if the CPU apprears to have been idle. */
223 		if (delta_ns > TICK_NSEC) {
224 			sg_cpu->iowait_boost = 0;
225 			sg_cpu->iowait_boost_pending = false;
226 		}
227 	}
228 }
229 
230 static void sugov_iowait_boost(struct sugov_cpu *sg_cpu, unsigned long *util,
231 			       unsigned long *max)
232 {
233 	unsigned int boost_util, boost_max;
234 
235 	if (!sg_cpu->iowait_boost)
236 		return;
237 
238 	if (sg_cpu->iowait_boost_pending) {
239 		sg_cpu->iowait_boost_pending = false;
240 	} else {
241 		sg_cpu->iowait_boost >>= 1;
242 		if (sg_cpu->iowait_boost < sg_cpu->sg_policy->policy->min) {
243 			sg_cpu->iowait_boost = 0;
244 			return;
245 		}
246 	}
247 
248 	boost_util = sg_cpu->iowait_boost;
249 	boost_max = sg_cpu->iowait_boost_max;
250 
251 	if (*util * boost_max < *max * boost_util) {
252 		*util = boost_util;
253 		*max = boost_max;
254 	}
255 }
256 
257 #ifdef CONFIG_NO_HZ_COMMON
258 static bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu)
259 {
260 	unsigned long idle_calls = tick_nohz_get_idle_calls_cpu(sg_cpu->cpu);
261 	bool ret = idle_calls == sg_cpu->saved_idle_calls;
262 
263 	sg_cpu->saved_idle_calls = idle_calls;
264 	return ret;
265 }
266 #else
267 static inline bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu) { return false; }
268 #endif /* CONFIG_NO_HZ_COMMON */
269 
270 /*
271  * Make sugov_should_update_freq() ignore the rate limit when DL
272  * has increased the utilization.
273  */
274 static inline void ignore_dl_rate_limit(struct sugov_cpu *sg_cpu, struct sugov_policy *sg_policy)
275 {
276 	if (cpu_util_dl(cpu_rq(sg_cpu->cpu)) > sg_cpu->util_dl)
277 		sg_policy->need_freq_update = true;
278 }
279 
280 static void sugov_update_single(struct update_util_data *hook, u64 time,
281 				unsigned int flags)
282 {
283 	struct sugov_cpu *sg_cpu = container_of(hook, struct sugov_cpu, update_util);
284 	struct sugov_policy *sg_policy = sg_cpu->sg_policy;
285 	unsigned long util, max;
286 	unsigned int next_f;
287 	bool busy;
288 
289 	sugov_set_iowait_boost(sg_cpu, time, flags);
290 	sg_cpu->last_update = time;
291 
292 	ignore_dl_rate_limit(sg_cpu, sg_policy);
293 
294 	if (!sugov_should_update_freq(sg_policy, time))
295 		return;
296 
297 	busy = sugov_cpu_is_busy(sg_cpu);
298 
299 	sugov_get_util(sg_cpu);
300 	max = sg_cpu->max;
301 	util = sugov_aggregate_util(sg_cpu);
302 	sugov_iowait_boost(sg_cpu, &util, &max);
303 	next_f = get_next_freq(sg_policy, util, max);
304 	/*
305 	 * Do not reduce the frequency if the CPU has not been idle
306 	 * recently, as the reduction is likely to be premature then.
307 	 */
308 	if (busy && next_f < sg_policy->next_freq) {
309 		next_f = sg_policy->next_freq;
310 
311 		/* Reset cached freq as next_freq has changed */
312 		sg_policy->cached_raw_freq = 0;
313 	}
314 
315 	sugov_update_commit(sg_policy, time, next_f);
316 }
317 
318 static unsigned int sugov_next_freq_shared(struct sugov_cpu *sg_cpu, u64 time)
319 {
320 	struct sugov_policy *sg_policy = sg_cpu->sg_policy;
321 	struct cpufreq_policy *policy = sg_policy->policy;
322 	unsigned long util = 0, max = 1;
323 	unsigned int j;
324 
325 	for_each_cpu(j, policy->cpus) {
326 		struct sugov_cpu *j_sg_cpu = &per_cpu(sugov_cpu, j);
327 		unsigned long j_util, j_max;
328 		s64 delta_ns;
329 
330 		sugov_get_util(j_sg_cpu);
331 
332 		/*
333 		 * If the CFS CPU utilization was last updated before the
334 		 * previous frequency update and the time elapsed between the
335 		 * last update of the CPU utilization and the last frequency
336 		 * update is long enough, reset iowait_boost and util_cfs, as
337 		 * they are now probably stale. However, still consider the
338 		 * CPU contribution if it has some DEADLINE utilization
339 		 * (util_dl).
340 		 */
341 		delta_ns = time - j_sg_cpu->last_update;
342 		if (delta_ns > TICK_NSEC) {
343 			j_sg_cpu->iowait_boost = 0;
344 			j_sg_cpu->iowait_boost_pending = false;
345 		}
346 
347 		j_max = j_sg_cpu->max;
348 		j_util = sugov_aggregate_util(j_sg_cpu);
349 		sugov_iowait_boost(j_sg_cpu, &j_util, &j_max);
350 		if (j_util * max > j_max * util) {
351 			util = j_util;
352 			max = j_max;
353 		}
354 	}
355 
356 	return get_next_freq(sg_policy, util, max);
357 }
358 
359 static void
360 sugov_update_shared(struct update_util_data *hook, u64 time, unsigned int flags)
361 {
362 	struct sugov_cpu *sg_cpu = container_of(hook, struct sugov_cpu, update_util);
363 	struct sugov_policy *sg_policy = sg_cpu->sg_policy;
364 	unsigned int next_f;
365 
366 	raw_spin_lock(&sg_policy->update_lock);
367 
368 	sugov_set_iowait_boost(sg_cpu, time, flags);
369 	sg_cpu->last_update = time;
370 
371 	ignore_dl_rate_limit(sg_cpu, sg_policy);
372 
373 	if (sugov_should_update_freq(sg_policy, time)) {
374 		next_f = sugov_next_freq_shared(sg_cpu, time);
375 		sugov_update_commit(sg_policy, time, next_f);
376 	}
377 
378 	raw_spin_unlock(&sg_policy->update_lock);
379 }
380 
381 static void sugov_work(struct kthread_work *work)
382 {
383 	struct sugov_policy *sg_policy = container_of(work, struct sugov_policy, work);
384 
385 	mutex_lock(&sg_policy->work_lock);
386 	__cpufreq_driver_target(sg_policy->policy, sg_policy->next_freq,
387 				CPUFREQ_RELATION_L);
388 	mutex_unlock(&sg_policy->work_lock);
389 
390 	sg_policy->work_in_progress = false;
391 }
392 
393 static void sugov_irq_work(struct irq_work *irq_work)
394 {
395 	struct sugov_policy *sg_policy;
396 
397 	sg_policy = container_of(irq_work, struct sugov_policy, irq_work);
398 
399 	/*
400 	 * For RT tasks, the schedutil governor shoots the frequency to maximum.
401 	 * Special care must be taken to ensure that this kthread doesn't result
402 	 * in the same behavior.
403 	 *
404 	 * This is (mostly) guaranteed by the work_in_progress flag. The flag is
405 	 * updated only at the end of the sugov_work() function and before that
406 	 * the schedutil governor rejects all other frequency scaling requests.
407 	 *
408 	 * There is a very rare case though, where the RT thread yields right
409 	 * after the work_in_progress flag is cleared. The effects of that are
410 	 * neglected for now.
411 	 */
412 	kthread_queue_work(&sg_policy->worker, &sg_policy->work);
413 }
414 
415 /************************** sysfs interface ************************/
416 
417 static struct sugov_tunables *global_tunables;
418 static DEFINE_MUTEX(global_tunables_lock);
419 
420 static inline struct sugov_tunables *to_sugov_tunables(struct gov_attr_set *attr_set)
421 {
422 	return container_of(attr_set, struct sugov_tunables, attr_set);
423 }
424 
425 static ssize_t rate_limit_us_show(struct gov_attr_set *attr_set, char *buf)
426 {
427 	struct sugov_tunables *tunables = to_sugov_tunables(attr_set);
428 
429 	return sprintf(buf, "%u\n", tunables->rate_limit_us);
430 }
431 
432 static ssize_t
433 rate_limit_us_store(struct gov_attr_set *attr_set, const char *buf, size_t count)
434 {
435 	struct sugov_tunables *tunables = to_sugov_tunables(attr_set);
436 	struct sugov_policy *sg_policy;
437 	unsigned int rate_limit_us;
438 
439 	if (kstrtouint(buf, 10, &rate_limit_us))
440 		return -EINVAL;
441 
442 	tunables->rate_limit_us = rate_limit_us;
443 
444 	list_for_each_entry(sg_policy, &attr_set->policy_list, tunables_hook)
445 		sg_policy->freq_update_delay_ns = rate_limit_us * NSEC_PER_USEC;
446 
447 	return count;
448 }
449 
450 static struct governor_attr rate_limit_us = __ATTR_RW(rate_limit_us);
451 
452 static struct attribute *sugov_attributes[] = {
453 	&rate_limit_us.attr,
454 	NULL
455 };
456 
457 static struct kobj_type sugov_tunables_ktype = {
458 	.default_attrs = sugov_attributes,
459 	.sysfs_ops = &governor_sysfs_ops,
460 };
461 
462 /********************** cpufreq governor interface *********************/
463 
464 static struct cpufreq_governor schedutil_gov;
465 
466 static struct sugov_policy *sugov_policy_alloc(struct cpufreq_policy *policy)
467 {
468 	struct sugov_policy *sg_policy;
469 
470 	sg_policy = kzalloc(sizeof(*sg_policy), GFP_KERNEL);
471 	if (!sg_policy)
472 		return NULL;
473 
474 	sg_policy->policy = policy;
475 	raw_spin_lock_init(&sg_policy->update_lock);
476 	return sg_policy;
477 }
478 
479 static void sugov_policy_free(struct sugov_policy *sg_policy)
480 {
481 	kfree(sg_policy);
482 }
483 
484 static int sugov_kthread_create(struct sugov_policy *sg_policy)
485 {
486 	struct task_struct *thread;
487 	struct sched_attr attr = {
488 		.size		= sizeof(struct sched_attr),
489 		.sched_policy	= SCHED_DEADLINE,
490 		.sched_flags	= SCHED_FLAG_SUGOV,
491 		.sched_nice	= 0,
492 		.sched_priority	= 0,
493 		/*
494 		 * Fake (unused) bandwidth; workaround to "fix"
495 		 * priority inheritance.
496 		 */
497 		.sched_runtime	=  1000000,
498 		.sched_deadline = 10000000,
499 		.sched_period	= 10000000,
500 	};
501 	struct cpufreq_policy *policy = sg_policy->policy;
502 	int ret;
503 
504 	/* kthread only required for slow path */
505 	if (policy->fast_switch_enabled)
506 		return 0;
507 
508 	kthread_init_work(&sg_policy->work, sugov_work);
509 	kthread_init_worker(&sg_policy->worker);
510 	thread = kthread_create(kthread_worker_fn, &sg_policy->worker,
511 				"sugov:%d",
512 				cpumask_first(policy->related_cpus));
513 	if (IS_ERR(thread)) {
514 		pr_err("failed to create sugov thread: %ld\n", PTR_ERR(thread));
515 		return PTR_ERR(thread);
516 	}
517 
518 	ret = sched_setattr_nocheck(thread, &attr);
519 	if (ret) {
520 		kthread_stop(thread);
521 		pr_warn("%s: failed to set SCHED_DEADLINE\n", __func__);
522 		return ret;
523 	}
524 
525 	sg_policy->thread = thread;
526 
527 	/* Kthread is bound to all CPUs by default */
528 	if (!policy->dvfs_possible_from_any_cpu)
529 		kthread_bind_mask(thread, policy->related_cpus);
530 
531 	init_irq_work(&sg_policy->irq_work, sugov_irq_work);
532 	mutex_init(&sg_policy->work_lock);
533 
534 	wake_up_process(thread);
535 
536 	return 0;
537 }
538 
539 static void sugov_kthread_stop(struct sugov_policy *sg_policy)
540 {
541 	/* kthread only required for slow path */
542 	if (sg_policy->policy->fast_switch_enabled)
543 		return;
544 
545 	kthread_flush_worker(&sg_policy->worker);
546 	kthread_stop(sg_policy->thread);
547 	mutex_destroy(&sg_policy->work_lock);
548 }
549 
550 static struct sugov_tunables *sugov_tunables_alloc(struct sugov_policy *sg_policy)
551 {
552 	struct sugov_tunables *tunables;
553 
554 	tunables = kzalloc(sizeof(*tunables), GFP_KERNEL);
555 	if (tunables) {
556 		gov_attr_set_init(&tunables->attr_set, &sg_policy->tunables_hook);
557 		if (!have_governor_per_policy())
558 			global_tunables = tunables;
559 	}
560 	return tunables;
561 }
562 
563 static void sugov_tunables_free(struct sugov_tunables *tunables)
564 {
565 	if (!have_governor_per_policy())
566 		global_tunables = NULL;
567 
568 	kfree(tunables);
569 }
570 
571 static int sugov_init(struct cpufreq_policy *policy)
572 {
573 	struct sugov_policy *sg_policy;
574 	struct sugov_tunables *tunables;
575 	int ret = 0;
576 
577 	/* State should be equivalent to EXIT */
578 	if (policy->governor_data)
579 		return -EBUSY;
580 
581 	cpufreq_enable_fast_switch(policy);
582 
583 	sg_policy = sugov_policy_alloc(policy);
584 	if (!sg_policy) {
585 		ret = -ENOMEM;
586 		goto disable_fast_switch;
587 	}
588 
589 	ret = sugov_kthread_create(sg_policy);
590 	if (ret)
591 		goto free_sg_policy;
592 
593 	mutex_lock(&global_tunables_lock);
594 
595 	if (global_tunables) {
596 		if (WARN_ON(have_governor_per_policy())) {
597 			ret = -EINVAL;
598 			goto stop_kthread;
599 		}
600 		policy->governor_data = sg_policy;
601 		sg_policy->tunables = global_tunables;
602 
603 		gov_attr_set_get(&global_tunables->attr_set, &sg_policy->tunables_hook);
604 		goto out;
605 	}
606 
607 	tunables = sugov_tunables_alloc(sg_policy);
608 	if (!tunables) {
609 		ret = -ENOMEM;
610 		goto stop_kthread;
611 	}
612 
613 	tunables->rate_limit_us = cpufreq_policy_transition_delay_us(policy);
614 
615 	policy->governor_data = sg_policy;
616 	sg_policy->tunables = tunables;
617 
618 	ret = kobject_init_and_add(&tunables->attr_set.kobj, &sugov_tunables_ktype,
619 				   get_governor_parent_kobj(policy), "%s",
620 				   schedutil_gov.name);
621 	if (ret)
622 		goto fail;
623 
624 out:
625 	mutex_unlock(&global_tunables_lock);
626 	return 0;
627 
628 fail:
629 	policy->governor_data = NULL;
630 	sugov_tunables_free(tunables);
631 
632 stop_kthread:
633 	sugov_kthread_stop(sg_policy);
634 	mutex_unlock(&global_tunables_lock);
635 
636 free_sg_policy:
637 	sugov_policy_free(sg_policy);
638 
639 disable_fast_switch:
640 	cpufreq_disable_fast_switch(policy);
641 
642 	pr_err("initialization failed (error %d)\n", ret);
643 	return ret;
644 }
645 
646 static void sugov_exit(struct cpufreq_policy *policy)
647 {
648 	struct sugov_policy *sg_policy = policy->governor_data;
649 	struct sugov_tunables *tunables = sg_policy->tunables;
650 	unsigned int count;
651 
652 	mutex_lock(&global_tunables_lock);
653 
654 	count = gov_attr_set_put(&tunables->attr_set, &sg_policy->tunables_hook);
655 	policy->governor_data = NULL;
656 	if (!count)
657 		sugov_tunables_free(tunables);
658 
659 	mutex_unlock(&global_tunables_lock);
660 
661 	sugov_kthread_stop(sg_policy);
662 	sugov_policy_free(sg_policy);
663 	cpufreq_disable_fast_switch(policy);
664 }
665 
666 static int sugov_start(struct cpufreq_policy *policy)
667 {
668 	struct sugov_policy *sg_policy = policy->governor_data;
669 	unsigned int cpu;
670 
671 	sg_policy->freq_update_delay_ns	= sg_policy->tunables->rate_limit_us * NSEC_PER_USEC;
672 	sg_policy->last_freq_update_time	= 0;
673 	sg_policy->next_freq			= UINT_MAX;
674 	sg_policy->work_in_progress		= false;
675 	sg_policy->need_freq_update		= false;
676 	sg_policy->cached_raw_freq		= 0;
677 
678 	for_each_cpu(cpu, policy->cpus) {
679 		struct sugov_cpu *sg_cpu = &per_cpu(sugov_cpu, cpu);
680 
681 		memset(sg_cpu, 0, sizeof(*sg_cpu));
682 		sg_cpu->cpu			= cpu;
683 		sg_cpu->sg_policy		= sg_policy;
684 		sg_cpu->iowait_boost_max	= policy->cpuinfo.max_freq;
685 	}
686 
687 	for_each_cpu(cpu, policy->cpus) {
688 		struct sugov_cpu *sg_cpu = &per_cpu(sugov_cpu, cpu);
689 
690 		cpufreq_add_update_util_hook(cpu, &sg_cpu->update_util,
691 					     policy_is_shared(policy) ?
692 							sugov_update_shared :
693 							sugov_update_single);
694 	}
695 	return 0;
696 }
697 
698 static void sugov_stop(struct cpufreq_policy *policy)
699 {
700 	struct sugov_policy *sg_policy = policy->governor_data;
701 	unsigned int cpu;
702 
703 	for_each_cpu(cpu, policy->cpus)
704 		cpufreq_remove_update_util_hook(cpu);
705 
706 	synchronize_sched();
707 
708 	if (!policy->fast_switch_enabled) {
709 		irq_work_sync(&sg_policy->irq_work);
710 		kthread_cancel_work_sync(&sg_policy->work);
711 	}
712 }
713 
714 static void sugov_limits(struct cpufreq_policy *policy)
715 {
716 	struct sugov_policy *sg_policy = policy->governor_data;
717 
718 	if (!policy->fast_switch_enabled) {
719 		mutex_lock(&sg_policy->work_lock);
720 		cpufreq_policy_apply_limits(policy);
721 		mutex_unlock(&sg_policy->work_lock);
722 	}
723 
724 	sg_policy->need_freq_update = true;
725 }
726 
727 static struct cpufreq_governor schedutil_gov = {
728 	.name			= "schedutil",
729 	.owner			= THIS_MODULE,
730 	.dynamic_switching	= true,
731 	.init			= sugov_init,
732 	.exit			= sugov_exit,
733 	.start			= sugov_start,
734 	.stop			= sugov_stop,
735 	.limits			= sugov_limits,
736 };
737 
738 #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL
739 struct cpufreq_governor *cpufreq_default_governor(void)
740 {
741 	return &schedutil_gov;
742 }
743 #endif
744 
745 static int __init sugov_register(void)
746 {
747 	return cpufreq_register_governor(&schedutil_gov);
748 }
749 fs_initcall(sugov_register);
750