xref: /linux/drivers/cpufreq/cpufreq_ondemand.c (revision 2277ab4a1df50e05bc732fe9488d4e902bb8399a)
1 /*
2  *  drivers/cpufreq/cpufreq_ondemand.c
3  *
4  *  Copyright (C)  2001 Russell King
5  *            (C)  2003 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>.
6  *                      Jun Nakajima <jun.nakajima@intel.com>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12 
13 #include <linux/kernel.h>
14 #include <linux/module.h>
15 #include <linux/init.h>
16 #include <linux/cpufreq.h>
17 #include <linux/cpu.h>
18 #include <linux/jiffies.h>
19 #include <linux/kernel_stat.h>
20 #include <linux/mutex.h>
21 #include <linux/hrtimer.h>
22 #include <linux/tick.h>
23 #include <linux/ktime.h>
24 #include <linux/sched.h>
25 
26 /*
27  * dbs is used in this file as a shortform for demandbased switching
28  * It helps to keep variable names smaller, simpler
29  */
30 
31 #define DEF_FREQUENCY_DOWN_DIFFERENTIAL		(10)
32 #define DEF_FREQUENCY_UP_THRESHOLD		(80)
33 #define MICRO_FREQUENCY_DOWN_DIFFERENTIAL	(3)
34 #define MICRO_FREQUENCY_UP_THRESHOLD		(95)
35 #define MICRO_FREQUENCY_MIN_SAMPLE_RATE		(10000)
36 #define MIN_FREQUENCY_UP_THRESHOLD		(11)
37 #define MAX_FREQUENCY_UP_THRESHOLD		(100)
38 
39 /*
40  * The polling frequency of this governor depends on the capability of
41  * the processor. Default polling frequency is 1000 times the transition
42  * latency of the processor. The governor will work on any processor with
43  * transition latency <= 10mS, using appropriate sampling
44  * rate.
45  * For CPUs with transition latency > 10mS (mostly drivers with CPUFREQ_ETERNAL)
46  * this governor will not work.
47  * All times here are in uS.
48  */
49 #define MIN_SAMPLING_RATE_RATIO			(2)
50 
51 static unsigned int min_sampling_rate;
52 
53 #define LATENCY_MULTIPLIER			(1000)
54 #define MIN_LATENCY_MULTIPLIER			(100)
55 #define TRANSITION_LATENCY_LIMIT		(10 * 1000 * 1000)
56 
57 static void do_dbs_timer(struct work_struct *work);
58 
59 /* Sampling types */
60 enum {DBS_NORMAL_SAMPLE, DBS_SUB_SAMPLE};
61 
62 struct cpu_dbs_info_s {
63 	cputime64_t prev_cpu_idle;
64 	cputime64_t prev_cpu_wall;
65 	cputime64_t prev_cpu_nice;
66 	struct cpufreq_policy *cur_policy;
67 	struct delayed_work work;
68 	struct cpufreq_frequency_table *freq_table;
69 	unsigned int freq_lo;
70 	unsigned int freq_lo_jiffies;
71 	unsigned int freq_hi_jiffies;
72 	int cpu;
73 	unsigned int sample_type:1;
74 	/*
75 	 * percpu mutex that serializes governor limit change with
76 	 * do_dbs_timer invocation. We do not want do_dbs_timer to run
77 	 * when user is changing the governor or limits.
78 	 */
79 	struct mutex timer_mutex;
80 };
81 static DEFINE_PER_CPU(struct cpu_dbs_info_s, cpu_dbs_info);
82 
83 static unsigned int dbs_enable;	/* number of CPUs using this policy */
84 
85 /*
86  * dbs_mutex protects data in dbs_tuners_ins from concurrent changes on
87  * different CPUs. It protects dbs_enable in governor start/stop.
88  */
89 static DEFINE_MUTEX(dbs_mutex);
90 
91 static struct workqueue_struct	*kondemand_wq;
92 
93 static struct dbs_tuners {
94 	unsigned int sampling_rate;
95 	unsigned int up_threshold;
96 	unsigned int down_differential;
97 	unsigned int ignore_nice;
98 	unsigned int powersave_bias;
99 } dbs_tuners_ins = {
100 	.up_threshold = DEF_FREQUENCY_UP_THRESHOLD,
101 	.down_differential = DEF_FREQUENCY_DOWN_DIFFERENTIAL,
102 	.ignore_nice = 0,
103 	.powersave_bias = 0,
104 };
105 
106 static inline cputime64_t get_cpu_idle_time_jiffy(unsigned int cpu,
107 							cputime64_t *wall)
108 {
109 	cputime64_t idle_time;
110 	cputime64_t cur_wall_time;
111 	cputime64_t busy_time;
112 
113 	cur_wall_time = jiffies64_to_cputime64(get_jiffies_64());
114 	busy_time = cputime64_add(kstat_cpu(cpu).cpustat.user,
115 			kstat_cpu(cpu).cpustat.system);
116 
117 	busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.irq);
118 	busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.softirq);
119 	busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.steal);
120 	busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.nice);
121 
122 	idle_time = cputime64_sub(cur_wall_time, busy_time);
123 	if (wall)
124 		*wall = cur_wall_time;
125 
126 	return idle_time;
127 }
128 
129 static inline cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall)
130 {
131 	u64 idle_time = get_cpu_idle_time_us(cpu, wall);
132 
133 	if (idle_time == -1ULL)
134 		return get_cpu_idle_time_jiffy(cpu, wall);
135 
136 	return idle_time;
137 }
138 
139 /*
140  * Find right freq to be set now with powersave_bias on.
141  * Returns the freq_hi to be used right now and will set freq_hi_jiffies,
142  * freq_lo, and freq_lo_jiffies in percpu area for averaging freqs.
143  */
144 static unsigned int powersave_bias_target(struct cpufreq_policy *policy,
145 					  unsigned int freq_next,
146 					  unsigned int relation)
147 {
148 	unsigned int freq_req, freq_reduc, freq_avg;
149 	unsigned int freq_hi, freq_lo;
150 	unsigned int index = 0;
151 	unsigned int jiffies_total, jiffies_hi, jiffies_lo;
152 	struct cpu_dbs_info_s *dbs_info = &per_cpu(cpu_dbs_info, policy->cpu);
153 
154 	if (!dbs_info->freq_table) {
155 		dbs_info->freq_lo = 0;
156 		dbs_info->freq_lo_jiffies = 0;
157 		return freq_next;
158 	}
159 
160 	cpufreq_frequency_table_target(policy, dbs_info->freq_table, freq_next,
161 			relation, &index);
162 	freq_req = dbs_info->freq_table[index].frequency;
163 	freq_reduc = freq_req * dbs_tuners_ins.powersave_bias / 1000;
164 	freq_avg = freq_req - freq_reduc;
165 
166 	/* Find freq bounds for freq_avg in freq_table */
167 	index = 0;
168 	cpufreq_frequency_table_target(policy, dbs_info->freq_table, freq_avg,
169 			CPUFREQ_RELATION_H, &index);
170 	freq_lo = dbs_info->freq_table[index].frequency;
171 	index = 0;
172 	cpufreq_frequency_table_target(policy, dbs_info->freq_table, freq_avg,
173 			CPUFREQ_RELATION_L, &index);
174 	freq_hi = dbs_info->freq_table[index].frequency;
175 
176 	/* Find out how long we have to be in hi and lo freqs */
177 	if (freq_hi == freq_lo) {
178 		dbs_info->freq_lo = 0;
179 		dbs_info->freq_lo_jiffies = 0;
180 		return freq_lo;
181 	}
182 	jiffies_total = usecs_to_jiffies(dbs_tuners_ins.sampling_rate);
183 	jiffies_hi = (freq_avg - freq_lo) * jiffies_total;
184 	jiffies_hi += ((freq_hi - freq_lo) / 2);
185 	jiffies_hi /= (freq_hi - freq_lo);
186 	jiffies_lo = jiffies_total - jiffies_hi;
187 	dbs_info->freq_lo = freq_lo;
188 	dbs_info->freq_lo_jiffies = jiffies_lo;
189 	dbs_info->freq_hi_jiffies = jiffies_hi;
190 	return freq_hi;
191 }
192 
193 static void ondemand_powersave_bias_init_cpu(int cpu)
194 {
195 	struct cpu_dbs_info_s *dbs_info = &per_cpu(cpu_dbs_info, cpu);
196 	dbs_info->freq_table = cpufreq_frequency_get_table(cpu);
197 	dbs_info->freq_lo = 0;
198 }
199 
200 static void ondemand_powersave_bias_init(void)
201 {
202 	int i;
203 	for_each_online_cpu(i) {
204 		ondemand_powersave_bias_init_cpu(i);
205 	}
206 }
207 
208 /************************** sysfs interface ************************/
209 static ssize_t show_sampling_rate_max(struct cpufreq_policy *policy, char *buf)
210 {
211 	printk_once(KERN_INFO "CPUFREQ: ondemand sampling_rate_max "
212 	       "sysfs file is deprecated - used by: %s\n", current->comm);
213 	return sprintf(buf, "%u\n", -1U);
214 }
215 
216 static ssize_t show_sampling_rate_min(struct cpufreq_policy *policy, char *buf)
217 {
218 	return sprintf(buf, "%u\n", min_sampling_rate);
219 }
220 
221 #define define_one_ro(_name)		\
222 static struct freq_attr _name =		\
223 __ATTR(_name, 0444, show_##_name, NULL)
224 
225 define_one_ro(sampling_rate_max);
226 define_one_ro(sampling_rate_min);
227 
228 /* cpufreq_ondemand Governor Tunables */
229 #define show_one(file_name, object)					\
230 static ssize_t show_##file_name						\
231 (struct cpufreq_policy *unused, char *buf)				\
232 {									\
233 	return sprintf(buf, "%u\n", dbs_tuners_ins.object);		\
234 }
235 show_one(sampling_rate, sampling_rate);
236 show_one(up_threshold, up_threshold);
237 show_one(ignore_nice_load, ignore_nice);
238 show_one(powersave_bias, powersave_bias);
239 
240 static ssize_t store_sampling_rate(struct cpufreq_policy *unused,
241 		const char *buf, size_t count)
242 {
243 	unsigned int input;
244 	int ret;
245 	ret = sscanf(buf, "%u", &input);
246 	if (ret != 1)
247 		return -EINVAL;
248 
249 	mutex_lock(&dbs_mutex);
250 	dbs_tuners_ins.sampling_rate = max(input, min_sampling_rate);
251 	mutex_unlock(&dbs_mutex);
252 
253 	return count;
254 }
255 
256 static ssize_t store_up_threshold(struct cpufreq_policy *unused,
257 		const char *buf, size_t count)
258 {
259 	unsigned int input;
260 	int ret;
261 	ret = sscanf(buf, "%u", &input);
262 
263 	if (ret != 1 || input > MAX_FREQUENCY_UP_THRESHOLD ||
264 			input < MIN_FREQUENCY_UP_THRESHOLD) {
265 		return -EINVAL;
266 	}
267 
268 	mutex_lock(&dbs_mutex);
269 	dbs_tuners_ins.up_threshold = input;
270 	mutex_unlock(&dbs_mutex);
271 
272 	return count;
273 }
274 
275 static ssize_t store_ignore_nice_load(struct cpufreq_policy *policy,
276 		const char *buf, size_t count)
277 {
278 	unsigned int input;
279 	int ret;
280 
281 	unsigned int j;
282 
283 	ret = sscanf(buf, "%u", &input);
284 	if (ret != 1)
285 		return -EINVAL;
286 
287 	if (input > 1)
288 		input = 1;
289 
290 	mutex_lock(&dbs_mutex);
291 	if (input == dbs_tuners_ins.ignore_nice) { /* nothing to do */
292 		mutex_unlock(&dbs_mutex);
293 		return count;
294 	}
295 	dbs_tuners_ins.ignore_nice = input;
296 
297 	/* we need to re-evaluate prev_cpu_idle */
298 	for_each_online_cpu(j) {
299 		struct cpu_dbs_info_s *dbs_info;
300 		dbs_info = &per_cpu(cpu_dbs_info, j);
301 		dbs_info->prev_cpu_idle = get_cpu_idle_time(j,
302 						&dbs_info->prev_cpu_wall);
303 		if (dbs_tuners_ins.ignore_nice)
304 			dbs_info->prev_cpu_nice = kstat_cpu(j).cpustat.nice;
305 
306 	}
307 	mutex_unlock(&dbs_mutex);
308 
309 	return count;
310 }
311 
312 static ssize_t store_powersave_bias(struct cpufreq_policy *unused,
313 		const char *buf, size_t count)
314 {
315 	unsigned int input;
316 	int ret;
317 	ret = sscanf(buf, "%u", &input);
318 
319 	if (ret != 1)
320 		return -EINVAL;
321 
322 	if (input > 1000)
323 		input = 1000;
324 
325 	mutex_lock(&dbs_mutex);
326 	dbs_tuners_ins.powersave_bias = input;
327 	ondemand_powersave_bias_init();
328 	mutex_unlock(&dbs_mutex);
329 
330 	return count;
331 }
332 
333 #define define_one_rw(_name) \
334 static struct freq_attr _name = \
335 __ATTR(_name, 0644, show_##_name, store_##_name)
336 
337 define_one_rw(sampling_rate);
338 define_one_rw(up_threshold);
339 define_one_rw(ignore_nice_load);
340 define_one_rw(powersave_bias);
341 
342 static struct attribute *dbs_attributes[] = {
343 	&sampling_rate_max.attr,
344 	&sampling_rate_min.attr,
345 	&sampling_rate.attr,
346 	&up_threshold.attr,
347 	&ignore_nice_load.attr,
348 	&powersave_bias.attr,
349 	NULL
350 };
351 
352 static struct attribute_group dbs_attr_group = {
353 	.attrs = dbs_attributes,
354 	.name = "ondemand",
355 };
356 
357 /************************** sysfs end ************************/
358 
359 static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info)
360 {
361 	unsigned int max_load_freq;
362 
363 	struct cpufreq_policy *policy;
364 	unsigned int j;
365 
366 	this_dbs_info->freq_lo = 0;
367 	policy = this_dbs_info->cur_policy;
368 
369 	/*
370 	 * Every sampling_rate, we check, if current idle time is less
371 	 * than 20% (default), then we try to increase frequency
372 	 * Every sampling_rate, we look for a the lowest
373 	 * frequency which can sustain the load while keeping idle time over
374 	 * 30%. If such a frequency exist, we try to decrease to this frequency.
375 	 *
376 	 * Any frequency increase takes it to the maximum frequency.
377 	 * Frequency reduction happens at minimum steps of
378 	 * 5% (default) of current frequency
379 	 */
380 
381 	/* Get Absolute Load - in terms of freq */
382 	max_load_freq = 0;
383 
384 	for_each_cpu(j, policy->cpus) {
385 		struct cpu_dbs_info_s *j_dbs_info;
386 		cputime64_t cur_wall_time, cur_idle_time;
387 		unsigned int idle_time, wall_time;
388 		unsigned int load, load_freq;
389 		int freq_avg;
390 
391 		j_dbs_info = &per_cpu(cpu_dbs_info, j);
392 
393 		cur_idle_time = get_cpu_idle_time(j, &cur_wall_time);
394 
395 		wall_time = (unsigned int) cputime64_sub(cur_wall_time,
396 				j_dbs_info->prev_cpu_wall);
397 		j_dbs_info->prev_cpu_wall = cur_wall_time;
398 
399 		idle_time = (unsigned int) cputime64_sub(cur_idle_time,
400 				j_dbs_info->prev_cpu_idle);
401 		j_dbs_info->prev_cpu_idle = cur_idle_time;
402 
403 		if (dbs_tuners_ins.ignore_nice) {
404 			cputime64_t cur_nice;
405 			unsigned long cur_nice_jiffies;
406 
407 			cur_nice = cputime64_sub(kstat_cpu(j).cpustat.nice,
408 					 j_dbs_info->prev_cpu_nice);
409 			/*
410 			 * Assumption: nice time between sampling periods will
411 			 * be less than 2^32 jiffies for 32 bit sys
412 			 */
413 			cur_nice_jiffies = (unsigned long)
414 					cputime64_to_jiffies64(cur_nice);
415 
416 			j_dbs_info->prev_cpu_nice = kstat_cpu(j).cpustat.nice;
417 			idle_time += jiffies_to_usecs(cur_nice_jiffies);
418 		}
419 
420 		if (unlikely(!wall_time || wall_time < idle_time))
421 			continue;
422 
423 		load = 100 * (wall_time - idle_time) / wall_time;
424 
425 		freq_avg = __cpufreq_driver_getavg(policy, j);
426 		if (freq_avg <= 0)
427 			freq_avg = policy->cur;
428 
429 		load_freq = load * freq_avg;
430 		if (load_freq > max_load_freq)
431 			max_load_freq = load_freq;
432 	}
433 
434 	/* Check for frequency increase */
435 	if (max_load_freq > dbs_tuners_ins.up_threshold * policy->cur) {
436 		/* if we are already at full speed then break out early */
437 		if (!dbs_tuners_ins.powersave_bias) {
438 			if (policy->cur == policy->max)
439 				return;
440 
441 			__cpufreq_driver_target(policy, policy->max,
442 				CPUFREQ_RELATION_H);
443 		} else {
444 			int freq = powersave_bias_target(policy, policy->max,
445 					CPUFREQ_RELATION_H);
446 			__cpufreq_driver_target(policy, freq,
447 				CPUFREQ_RELATION_L);
448 		}
449 		return;
450 	}
451 
452 	/* Check for frequency decrease */
453 	/* if we cannot reduce the frequency anymore, break out early */
454 	if (policy->cur == policy->min)
455 		return;
456 
457 	/*
458 	 * The optimal frequency is the frequency that is the lowest that
459 	 * can support the current CPU usage without triggering the up
460 	 * policy. To be safe, we focus 10 points under the threshold.
461 	 */
462 	if (max_load_freq <
463 	    (dbs_tuners_ins.up_threshold - dbs_tuners_ins.down_differential) *
464 	     policy->cur) {
465 		unsigned int freq_next;
466 		freq_next = max_load_freq /
467 				(dbs_tuners_ins.up_threshold -
468 				 dbs_tuners_ins.down_differential);
469 
470 		if (!dbs_tuners_ins.powersave_bias) {
471 			__cpufreq_driver_target(policy, freq_next,
472 					CPUFREQ_RELATION_L);
473 		} else {
474 			int freq = powersave_bias_target(policy, freq_next,
475 					CPUFREQ_RELATION_L);
476 			__cpufreq_driver_target(policy, freq,
477 				CPUFREQ_RELATION_L);
478 		}
479 	}
480 }
481 
482 static void do_dbs_timer(struct work_struct *work)
483 {
484 	struct cpu_dbs_info_s *dbs_info =
485 		container_of(work, struct cpu_dbs_info_s, work.work);
486 	unsigned int cpu = dbs_info->cpu;
487 	int sample_type = dbs_info->sample_type;
488 
489 	/* We want all CPUs to do sampling nearly on same jiffy */
490 	int delay = usecs_to_jiffies(dbs_tuners_ins.sampling_rate);
491 
492 	delay -= jiffies % delay;
493 	mutex_lock(&dbs_info->timer_mutex);
494 
495 	/* Common NORMAL_SAMPLE setup */
496 	dbs_info->sample_type = DBS_NORMAL_SAMPLE;
497 	if (!dbs_tuners_ins.powersave_bias ||
498 	    sample_type == DBS_NORMAL_SAMPLE) {
499 		dbs_check_cpu(dbs_info);
500 		if (dbs_info->freq_lo) {
501 			/* Setup timer for SUB_SAMPLE */
502 			dbs_info->sample_type = DBS_SUB_SAMPLE;
503 			delay = dbs_info->freq_hi_jiffies;
504 		}
505 	} else {
506 		__cpufreq_driver_target(dbs_info->cur_policy,
507 			dbs_info->freq_lo, CPUFREQ_RELATION_H);
508 	}
509 	queue_delayed_work_on(cpu, kondemand_wq, &dbs_info->work, delay);
510 	mutex_unlock(&dbs_info->timer_mutex);
511 }
512 
513 static inline void dbs_timer_init(struct cpu_dbs_info_s *dbs_info)
514 {
515 	/* We want all CPUs to do sampling nearly on same jiffy */
516 	int delay = usecs_to_jiffies(dbs_tuners_ins.sampling_rate);
517 	delay -= jiffies % delay;
518 
519 	dbs_info->sample_type = DBS_NORMAL_SAMPLE;
520 	INIT_DELAYED_WORK_DEFERRABLE(&dbs_info->work, do_dbs_timer);
521 	queue_delayed_work_on(dbs_info->cpu, kondemand_wq, &dbs_info->work,
522 		delay);
523 }
524 
525 static inline void dbs_timer_exit(struct cpu_dbs_info_s *dbs_info)
526 {
527 	cancel_delayed_work_sync(&dbs_info->work);
528 }
529 
530 static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
531 				   unsigned int event)
532 {
533 	unsigned int cpu = policy->cpu;
534 	struct cpu_dbs_info_s *this_dbs_info;
535 	unsigned int j;
536 	int rc;
537 
538 	this_dbs_info = &per_cpu(cpu_dbs_info, cpu);
539 
540 	switch (event) {
541 	case CPUFREQ_GOV_START:
542 		if ((!cpu_online(cpu)) || (!policy->cur))
543 			return -EINVAL;
544 
545 		mutex_lock(&dbs_mutex);
546 
547 		rc = sysfs_create_group(&policy->kobj, &dbs_attr_group);
548 		if (rc) {
549 			mutex_unlock(&dbs_mutex);
550 			return rc;
551 		}
552 
553 		dbs_enable++;
554 		for_each_cpu(j, policy->cpus) {
555 			struct cpu_dbs_info_s *j_dbs_info;
556 			j_dbs_info = &per_cpu(cpu_dbs_info, j);
557 			j_dbs_info->cur_policy = policy;
558 
559 			j_dbs_info->prev_cpu_idle = get_cpu_idle_time(j,
560 						&j_dbs_info->prev_cpu_wall);
561 			if (dbs_tuners_ins.ignore_nice) {
562 				j_dbs_info->prev_cpu_nice =
563 						kstat_cpu(j).cpustat.nice;
564 			}
565 		}
566 		this_dbs_info->cpu = cpu;
567 		ondemand_powersave_bias_init_cpu(cpu);
568 		mutex_init(&this_dbs_info->timer_mutex);
569 		/*
570 		 * Start the timerschedule work, when this governor
571 		 * is used for first time
572 		 */
573 		if (dbs_enable == 1) {
574 			unsigned int latency;
575 			/* policy latency is in nS. Convert it to uS first */
576 			latency = policy->cpuinfo.transition_latency / 1000;
577 			if (latency == 0)
578 				latency = 1;
579 			/* Bring kernel and HW constraints together */
580 			min_sampling_rate = max(min_sampling_rate,
581 					MIN_LATENCY_MULTIPLIER * latency);
582 			dbs_tuners_ins.sampling_rate =
583 				max(min_sampling_rate,
584 				    latency * LATENCY_MULTIPLIER);
585 		}
586 		mutex_unlock(&dbs_mutex);
587 
588 		dbs_timer_init(this_dbs_info);
589 		break;
590 
591 	case CPUFREQ_GOV_STOP:
592 		dbs_timer_exit(this_dbs_info);
593 
594 		mutex_lock(&dbs_mutex);
595 		sysfs_remove_group(&policy->kobj, &dbs_attr_group);
596 		mutex_destroy(&this_dbs_info->timer_mutex);
597 		dbs_enable--;
598 		mutex_unlock(&dbs_mutex);
599 
600 		break;
601 
602 	case CPUFREQ_GOV_LIMITS:
603 		mutex_lock(&this_dbs_info->timer_mutex);
604 		if (policy->max < this_dbs_info->cur_policy->cur)
605 			__cpufreq_driver_target(this_dbs_info->cur_policy,
606 				policy->max, CPUFREQ_RELATION_H);
607 		else if (policy->min > this_dbs_info->cur_policy->cur)
608 			__cpufreq_driver_target(this_dbs_info->cur_policy,
609 				policy->min, CPUFREQ_RELATION_L);
610 		mutex_unlock(&this_dbs_info->timer_mutex);
611 		break;
612 	}
613 	return 0;
614 }
615 
616 #ifndef CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND
617 static
618 #endif
619 struct cpufreq_governor cpufreq_gov_ondemand = {
620 	.name			= "ondemand",
621 	.governor		= cpufreq_governor_dbs,
622 	.max_transition_latency = TRANSITION_LATENCY_LIMIT,
623 	.owner			= THIS_MODULE,
624 };
625 
626 static int __init cpufreq_gov_dbs_init(void)
627 {
628 	int err;
629 	cputime64_t wall;
630 	u64 idle_time;
631 	int cpu = get_cpu();
632 
633 	idle_time = get_cpu_idle_time_us(cpu, &wall);
634 	put_cpu();
635 	if (idle_time != -1ULL) {
636 		/* Idle micro accounting is supported. Use finer thresholds */
637 		dbs_tuners_ins.up_threshold = MICRO_FREQUENCY_UP_THRESHOLD;
638 		dbs_tuners_ins.down_differential =
639 					MICRO_FREQUENCY_DOWN_DIFFERENTIAL;
640 		/*
641 		 * In no_hz/micro accounting case we set the minimum frequency
642 		 * not depending on HZ, but fixed (very low). The deferred
643 		 * timer might skip some samples if idle/sleeping as needed.
644 		*/
645 		min_sampling_rate = MICRO_FREQUENCY_MIN_SAMPLE_RATE;
646 	} else {
647 		/* For correct statistics, we need 10 ticks for each measure */
648 		min_sampling_rate =
649 			MIN_SAMPLING_RATE_RATIO * jiffies_to_usecs(10);
650 	}
651 
652 	kondemand_wq = create_workqueue("kondemand");
653 	if (!kondemand_wq) {
654 		printk(KERN_ERR "Creation of kondemand failed\n");
655 		return -EFAULT;
656 	}
657 	err = cpufreq_register_governor(&cpufreq_gov_ondemand);
658 	if (err)
659 		destroy_workqueue(kondemand_wq);
660 
661 	return err;
662 }
663 
664 static void __exit cpufreq_gov_dbs_exit(void)
665 {
666 	cpufreq_unregister_governor(&cpufreq_gov_ondemand);
667 	destroy_workqueue(kondemand_wq);
668 }
669 
670 
671 MODULE_AUTHOR("Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>");
672 MODULE_AUTHOR("Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>");
673 MODULE_DESCRIPTION("'cpufreq_ondemand' - A dynamic cpufreq governor for "
674 	"Low Latency Frequency Transition capable processors");
675 MODULE_LICENSE("GPL");
676 
677 #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND
678 fs_initcall(cpufreq_gov_dbs_init);
679 #else
680 module_init(cpufreq_gov_dbs_init);
681 #endif
682 module_exit(cpufreq_gov_dbs_exit);
683