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