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