Patch "cpufreq: Limit resolving a frequency to policy min/max" has been added to the 6.7-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    cpufreq: Limit resolving a frequency to policy min/max

to the 6.7-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     cpufreq-limit-resolving-a-frequency-to-policy-min-ma.patch
and it can be found in the queue-6.7 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 7bc6ff9aa8c2a9a91369bc9f1f8c552ccc66d6b7
Author: Shivnandan Kumar <quic_kshivnan@xxxxxxxxxxx>
Date:   Tue Feb 27 14:43:51 2024 +0530

    cpufreq: Limit resolving a frequency to policy min/max
    
    [ Upstream commit d394abcb12bb1a6f309c1221fdb8e73594ecf1b4 ]
    
    Resolving a frequency to an efficient one should not transgress
    policy->max (which can be set for thermal reason) and policy->min.
    
    Currently, there is possibility where scaling_cur_freq can exceed
    scaling_max_freq when scaling_max_freq is an inefficient frequency.
    
    Add a check to ensure that resolving a frequency will respect
    policy->min/max.
    
    Cc: All applicable <stable@xxxxxxxxxxxxxxx>
    Fixes: 1f39fa0dccff ("cpufreq: Introducing CPUFREQ_RELATION_E")
    Signed-off-by: Shivnandan Kumar <quic_kshivnan@xxxxxxxxxxx>
    [ rjw: Whitespace adjustment, changelog edits ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 1c5ca92a0555f..90f8bd1736a2c 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -1021,6 +1021,18 @@ static inline int cpufreq_table_find_index_c(struct cpufreq_policy *policy,
 						   efficiencies);
 }
 
+static inline bool cpufreq_is_in_limits(struct cpufreq_policy *policy, int idx)
+{
+	unsigned int freq;
+
+	if (idx < 0)
+		return false;
+
+	freq = policy->freq_table[idx].frequency;
+
+	return freq == clamp_val(freq, policy->min, policy->max);
+}
+
 static inline int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
 						 unsigned int target_freq,
 						 unsigned int relation)
@@ -1054,7 +1066,8 @@ static inline int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
 		return 0;
 	}
 
-	if (idx < 0 && efficiencies) {
+	/* Limit frequency index to honor policy->min/max */
+	if (!cpufreq_is_in_limits(policy, idx) && efficiencies) {
 		efficiencies = false;
 		goto retry;
 	}




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux