mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 22:52:35 +02:00
cpufreq: interactive: add sysfs control for timer rate
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>
This commit is contained in:
parent
8b12552d24
commit
5d14f981eb
|
|
@ -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);
|
||||
|
||||
|
|
@ -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:
|
||||
|
|
@ -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 {
|
||||
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user