Skip to content

Commit

Permalink
cpufreq: interactive: add sysfs control for timer rate
Browse files Browse the repository at this point in the history
Add a new sysfs control that tunes the rate of the timer used to
increase cpu frequency

Change-Id: I1aa13ae54bb43aff5b3688984d2955f56aae1658
Signed-off-by: Allen Martin <amartin@nvidia.com>
  • Loading branch information
allen-martin authored and Kali- committed Dec 2, 2011
1 parent d6c5b1f commit 7a81d03
Showing 1 changed file with 33 additions and 3 deletions.
36 changes: 33 additions & 3 deletions drivers/cpufreq/cpufreq_interactive.c
Expand Up @@ -66,6 +66,12 @@ static unsigned long go_maxspeed_load;
#define DEFAULT_MIN_SAMPLE_TIME 80000;
static unsigned long min_sample_time;

/*
* The sample rate of the timer used to increase frequency
*/
#define DEFAULT_TIMER_RATE 30000;
static unsigned long timer_rate;

static int cpufreq_governor_interactive(struct cpufreq_policy *policy,
unsigned int event);

Expand Down Expand Up @@ -219,7 +225,7 @@ static void cpufreq_interactive_timer(unsigned long data)

pcpu->time_in_idle = get_cpu_idle_time_us(
data, &pcpu->idle_exit_time);
mod_timer(&pcpu->cpu_timer, jiffies + 2);
mod_timer(&pcpu->cpu_timer, jiffies + usecs_to_jiffies(timer_rate));
}

exit:
Expand Down Expand Up @@ -254,7 +260,7 @@ static void cpufreq_interactive_idle_start(void)
pcpu->time_in_idle = get_cpu_idle_time_us(
smp_processor_id(), &pcpu->idle_exit_time);
pcpu->timer_idlecancel = 0;
mod_timer(&pcpu->cpu_timer, jiffies + 2);
mod_timer(&pcpu->cpu_timer, jiffies + usecs_to_jiffies(timer_rate));
}
#endif
} else {
Expand Down Expand Up @@ -304,7 +310,7 @@ static void cpufreq_interactive_idle_end(void)
get_cpu_idle_time_us(smp_processor_id(),
&pcpu->idle_exit_time);
pcpu->timer_idlecancel = 0;
mod_timer(&pcpu->cpu_timer, jiffies + 2);
mod_timer(&pcpu->cpu_timer, jiffies + usecs_to_jiffies(timer_rate));
}

}
Expand Down Expand Up @@ -429,9 +435,32 @@ static ssize_t store_min_sample_time(struct kobject *kobj,
static struct global_attr min_sample_time_attr = __ATTR(min_sample_time, 0644,
show_min_sample_time, store_min_sample_time);

static ssize_t show_timer_rate(struct kobject *kobj,
struct attribute *attr, char *buf)
{
return sprintf(buf, "%lu\n", timer_rate);
}

static ssize_t store_timer_rate(struct kobject *kobj,
struct attribute *attr, const char *buf, size_t count)
{
int ret;
unsigned long val;

ret = strict_strtoul(buf, 0, &val);
if (ret < 0)
return ret;
timer_rate = val;
return count;
}

static struct global_attr timer_rate_attr = __ATTR(timer_rate, 0644,
show_timer_rate, store_timer_rate);

static struct attribute *interactive_attributes[] = {
&go_maxspeed_load_attr.attr,
&min_sample_time_attr.attr,
&timer_rate_attr.attr,
NULL,
};

Expand Down Expand Up @@ -547,6 +576,7 @@ static int __init cpufreq_interactive_init(void)

go_maxspeed_load = DEFAULT_GO_MAXSPEED_LOAD;
min_sample_time = DEFAULT_MIN_SAMPLE_TIME;
timer_rate = DEFAULT_TIMER_RATE;

/* Initalize per-cpu timers */
for_each_possible_cpu(i) {
Expand Down

0 comments on commit 7a81d03

Please sign in to comment.