|
|
|
@ -65,14 +65,14 @@ struct cpu_dbs_info_s { |
|
|
|
|
cputime64_t prev_cpu_wall; |
|
|
|
|
cputime64_t prev_cpu_nice; |
|
|
|
|
struct cpufreq_policy *cur_policy; |
|
|
|
|
struct delayed_work work; |
|
|
|
|
struct delayed_work work; |
|
|
|
|
struct cpufreq_frequency_table *freq_table; |
|
|
|
|
unsigned int freq_lo; |
|
|
|
|
unsigned int freq_lo_jiffies; |
|
|
|
|
unsigned int freq_hi_jiffies; |
|
|
|
|
int cpu; |
|
|
|
|
unsigned int enable:1, |
|
|
|
|
sample_type:1; |
|
|
|
|
sample_type:1; |
|
|
|
|
}; |
|
|
|
|
static DEFINE_PER_CPU(struct cpu_dbs_info_s, cpu_dbs_info); |
|
|
|
|
|
|
|
|
@ -203,12 +203,12 @@ static void ondemand_powersave_bias_init(void) |
|
|
|
|
/************************** sysfs interface ************************/ |
|
|
|
|
static ssize_t show_sampling_rate_max(struct cpufreq_policy *policy, char *buf) |
|
|
|
|
{ |
|
|
|
|
return sprintf (buf, "%u\n", MAX_SAMPLING_RATE); |
|
|
|
|
return sprintf(buf, "%u\n", MAX_SAMPLING_RATE); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ssize_t show_sampling_rate_min(struct cpufreq_policy *policy, char *buf) |
|
|
|
|
{ |
|
|
|
|
return sprintf (buf, "%u\n", MIN_SAMPLING_RATE); |
|
|
|
|
return sprintf(buf, "%u\n", MIN_SAMPLING_RATE); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#define define_one_ro(_name) \ |
|
|
|
@ -279,14 +279,14 @@ static ssize_t store_ignore_nice_load(struct cpufreq_policy *policy, |
|
|
|
|
unsigned int j; |
|
|
|
|
|
|
|
|
|
ret = sscanf(buf, "%u", &input); |
|
|
|
|
if ( ret != 1 ) |
|
|
|
|
if (ret != 1) |
|
|
|
|
return -EINVAL; |
|
|
|
|
|
|
|
|
|
if ( input > 1 ) |
|
|
|
|
if (input > 1) |
|
|
|
|
input = 1; |
|
|
|
|
|
|
|
|
|
mutex_lock(&dbs_mutex); |
|
|
|
|
if ( input == dbs_tuners_ins.ignore_nice ) { /* nothing to do */ |
|
|
|
|
if (input == dbs_tuners_ins.ignore_nice) { /* nothing to do */ |
|
|
|
|
mutex_unlock(&dbs_mutex); |
|
|
|
|
return count; |
|
|
|
|
} |
|
|
|
@ -337,7 +337,7 @@ define_one_rw(up_threshold); |
|
|
|
|
define_one_rw(ignore_nice_load); |
|
|
|
|
define_one_rw(powersave_bias); |
|
|
|
|
|
|
|
|
|
static struct attribute * dbs_attributes[] = { |
|
|
|
|
static struct attribute *dbs_attributes[] = { |
|
|
|
|
&sampling_rate_max.attr, |
|
|
|
|
&sampling_rate_min.attr, |
|
|
|
|
&sampling_rate.attr, |
|
|
|
@ -512,8 +512,7 @@ static void do_dbs_timer(struct work_struct *work) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
__cpufreq_driver_target(dbs_info->cur_policy, |
|
|
|
|
dbs_info->freq_lo, |
|
|
|
|
CPUFREQ_RELATION_H); |
|
|
|
|
dbs_info->freq_lo, CPUFREQ_RELATION_H); |
|
|
|
|
} |
|
|
|
|
queue_delayed_work_on(cpu, kondemand_wq, &dbs_info->work, delay); |
|
|
|
|
unlock_policy_rwsem_write(cpu); |
|
|
|
@ -530,7 +529,7 @@ static inline void dbs_timer_init(struct cpu_dbs_info_s *dbs_info) |
|
|
|
|
dbs_info->sample_type = DBS_NORMAL_SAMPLE; |
|
|
|
|
INIT_DELAYED_WORK_DEFERRABLE(&dbs_info->work, do_dbs_timer); |
|
|
|
|
queue_delayed_work_on(dbs_info->cpu, kondemand_wq, &dbs_info->work, |
|
|
|
|
delay); |
|
|
|
|
delay); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline void dbs_timer_exit(struct cpu_dbs_info_s *dbs_info) |
|
|
|
@ -617,12 +616,10 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, |
|
|
|
|
mutex_lock(&dbs_mutex); |
|
|
|
|
if (policy->max < this_dbs_info->cur_policy->cur) |
|
|
|
|
__cpufreq_driver_target(this_dbs_info->cur_policy, |
|
|
|
|
policy->max, |
|
|
|
|
CPUFREQ_RELATION_H); |
|
|
|
|
policy->max, CPUFREQ_RELATION_H); |
|
|
|
|
else if (policy->min > this_dbs_info->cur_policy->cur) |
|
|
|
|
__cpufreq_driver_target(this_dbs_info->cur_policy, |
|
|
|
|
policy->min, |
|
|
|
|
CPUFREQ_RELATION_L); |
|
|
|
|
policy->min, CPUFREQ_RELATION_L); |
|
|
|
|
mutex_unlock(&dbs_mutex); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
@ -677,7 +674,7 @@ static void __exit cpufreq_gov_dbs_exit(void) |
|
|
|
|
MODULE_AUTHOR("Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>"); |
|
|
|
|
MODULE_AUTHOR("Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>"); |
|
|
|
|
MODULE_DESCRIPTION("'cpufreq_ondemand' - A dynamic cpufreq governor for " |
|
|
|
|
"Low Latency Frequency Transition capable processors"); |
|
|
|
|
"Low Latency Frequency Transition capable processors"); |
|
|
|
|
MODULE_LICENSE("GPL"); |
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND |
|
|
|
|