diff options
Diffstat (limited to 'drivers/cpufreq')
-rw-r--r-- | drivers/cpufreq/cpufreq_stats.c | 9 | ||||
-rw-r--r-- | drivers/cpufreq/powernow-k8.c | 6 |
2 files changed, 11 insertions, 4 deletions
diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c index b60a4c263686..faf7c5217848 100644 --- a/drivers/cpufreq/cpufreq_stats.c +++ b/drivers/cpufreq/cpufreq_stats.c | |||
@@ -298,11 +298,13 @@ static int cpufreq_stat_notifier_trans(struct notifier_block *nb, | |||
298 | old_index = stat->last_index; | 298 | old_index = stat->last_index; |
299 | new_index = freq_table_get_index(stat, freq->new); | 299 | new_index = freq_table_get_index(stat, freq->new); |
300 | 300 | ||
301 | cpufreq_stats_update(freq->cpu); | 301 | /* We can't do stat->time_in_state[-1]= .. */ |
302 | if (old_index == new_index) | 302 | if (old_index == -1 || new_index == -1) |
303 | return 0; | 303 | return 0; |
304 | 304 | ||
305 | if (old_index == -1 || new_index == -1) | 305 | cpufreq_stats_update(freq->cpu); |
306 | |||
307 | if (old_index == new_index) | ||
306 | return 0; | 308 | return 0; |
307 | 309 | ||
308 | spin_lock(&cpufreq_stats_lock); | 310 | spin_lock(&cpufreq_stats_lock); |
@@ -387,6 +389,7 @@ static void __exit cpufreq_stats_exit(void) | |||
387 | unregister_hotcpu_notifier(&cpufreq_stat_cpu_notifier); | 389 | unregister_hotcpu_notifier(&cpufreq_stat_cpu_notifier); |
388 | for_each_online_cpu(cpu) { | 390 | for_each_online_cpu(cpu) { |
389 | cpufreq_stats_free_table(cpu); | 391 | cpufreq_stats_free_table(cpu); |
392 | cpufreq_stats_free_sysfs(cpu); | ||
390 | } | 393 | } |
391 | } | 394 | } |
392 | 395 | ||
diff --git a/drivers/cpufreq/powernow-k8.c b/drivers/cpufreq/powernow-k8.c index 83479b6fb9a1..bce576d7478e 100644 --- a/drivers/cpufreq/powernow-k8.c +++ b/drivers/cpufreq/powernow-k8.c | |||
@@ -1079,6 +1079,9 @@ static int transition_frequency_fidvid(struct powernow_k8_data *data, | |||
1079 | } | 1079 | } |
1080 | 1080 | ||
1081 | res = transition_fid_vid(data, fid, vid); | 1081 | res = transition_fid_vid(data, fid, vid); |
1082 | if (res) | ||
1083 | return res; | ||
1084 | |||
1082 | freqs.new = find_khz_freq_from_fid(data->currfid); | 1085 | freqs.new = find_khz_freq_from_fid(data->currfid); |
1083 | 1086 | ||
1084 | for_each_cpu(i, data->available_cores) { | 1087 | for_each_cpu(i, data->available_cores) { |
@@ -1101,7 +1104,8 @@ static int transition_frequency_pstate(struct powernow_k8_data *data, | |||
1101 | /* get MSR index for hardware pstate transition */ | 1104 | /* get MSR index for hardware pstate transition */ |
1102 | pstate = index & HW_PSTATE_MASK; | 1105 | pstate = index & HW_PSTATE_MASK; |
1103 | if (pstate > data->max_hw_pstate) | 1106 | if (pstate > data->max_hw_pstate) |
1104 | return 0; | 1107 | return -EINVAL; |
1108 | |||
1105 | freqs.old = find_khz_freq_from_pstate(data->powernow_table, | 1109 | freqs.old = find_khz_freq_from_pstate(data->powernow_table, |
1106 | data->currpstate); | 1110 | data->currpstate); |
1107 | freqs.new = find_khz_freq_from_pstate(data->powernow_table, pstate); | 1111 | freqs.new = find_khz_freq_from_pstate(data->powernow_table, pstate); |