cpufreq: interactive: handle errors from cpufreq_frequency_table_target
Todd Poynor [Mon, 22 Apr 2013 23:44:58 +0000 (16:44 -0700)]
Add checks for error return from cpufreq_frequency_table_target, and be
less noisy on the existing call with an error check.  CPU hotplug and
system shutdown may cause this call to return -EINVAL.

Bug 1316765

Change-Id: Id78d8829920462c0db1c7e14e717d91740d6cb44
Signed-off-by: Todd Poynor <toddpoynor@google.com>
(cherry picked from commit 952c6d49444061849e2e254b0d701ebb1664f4b3)
Signed-off-by: Puneet Saxena <puneets@nvidia.com>
Reviewed-on: http://git-master/r/251580
Reviewed-by: Elaine Tam <etam@nvidia.com>
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Jay Cheng <jacheng@nvidia.com>
Reviewed-by: Venkata (Muni) Anda <vanda@nvidia.com>
Tested-by: Elaine Tam <etam@nvidia.com>

drivers/cpufreq/cpufreq_interactive.c

index 45e7f3f..b84e530 100644 (file)
@@ -246,9 +246,10 @@ static unsigned int choose_freq(
                 * than or equal to the target load.
                 */
 
-               cpufreq_frequency_table_target(
-                       pcpu->policy, pcpu->freq_table, loadadjfreq / tl,
-                       CPUFREQ_RELATION_L, &index);
+               if (cpufreq_frequency_table_target(
+                           pcpu->policy, pcpu->freq_table, loadadjfreq / tl,
+                           CPUFREQ_RELATION_L, &index))
+                       break;
                freq = pcpu->freq_table[index].frequency;
 
                if (freq > prevfreq) {
@@ -260,10 +261,11 @@ static unsigned int choose_freq(
                                 * Find the highest frequency that is less
                                 * than freqmax.
                                 */
-                               cpufreq_frequency_table_target(
-                                       pcpu->policy, pcpu->freq_table,
-                                       freqmax - 1, CPUFREQ_RELATION_H,
-                                       &index);
+                               if (cpufreq_frequency_table_target(
+                                           pcpu->policy, pcpu->freq_table,
+                                           freqmax - 1, CPUFREQ_RELATION_H,
+                                           &index))
+                                       break;
                                freq = pcpu->freq_table[index].frequency;
 
                                if (freq == freqmin) {
@@ -286,10 +288,11 @@ static unsigned int choose_freq(
                                 * Find the lowest frequency that is higher
                                 * than freqmin.
                                 */
-                               cpufreq_frequency_table_target(
-                                       pcpu->policy, pcpu->freq_table,
-                                       freqmin + 1, CPUFREQ_RELATION_L,
-                                       &index);
+                               if (cpufreq_frequency_table_target(
+                                           pcpu->policy, pcpu->freq_table,
+                                           freqmin + 1, CPUFREQ_RELATION_L,
+                                           &index))
+                                       break;
                                freq = pcpu->freq_table[index].frequency;
 
                                /*
@@ -388,11 +391,8 @@ static void cpufreq_interactive_timer(unsigned long data)
 
        if (cpufreq_frequency_table_target(pcpu->policy, pcpu->freq_table,
                                           new_freq, CPUFREQ_RELATION_L,
-                                          &index)) {
-               pr_warn_once("timer %d: cpufreq_frequency_table_target error\n",
-                            (int) data);
+                                          &index))
                goto rearm;
-       }
 
        new_freq = pcpu->freq_table[index].frequency;