]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cpufreq: intel_pstate: Add and use hybrid_has_l3()
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 15 Oct 2025 13:47:45 +0000 (15:47 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 20 Oct 2025 19:20:49 +0000 (21:20 +0200)
Introduce a function for checking whether or not a given CPU has L3
cache, called hybrid_has_l3(), and use it in hybrid_get_cost() for
computing cost coefficients associated with a given perf domain.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://patch.msgid.link/13884343.uLZWGnKmhe@rafael.j.wysocki
drivers/cpufreq/intel_pstate.c

index 22316c93086436996290e035d398505032c97739..f85056ee6e619b2d4a7aa385be892e0b42dd5a63 100644 (file)
@@ -951,11 +951,26 @@ static int hybrid_active_power(struct device *dev, unsigned long *power,
        return 0;
 }
 
+static bool hybrid_has_l3(unsigned int cpu)
+{
+       struct cpu_cacheinfo *cacheinfo = get_cpu_cacheinfo(cpu);
+       unsigned int i;
+
+       if (!cacheinfo)
+               return false;
+
+       for (i = 0; i < cacheinfo->num_leaves; i++) {
+               if (cacheinfo->info_list[i].level == 3)
+                       return true;
+       }
+
+       return false;
+}
+
 static int hybrid_get_cost(struct device *dev, unsigned long freq,
                           unsigned long *cost)
 {
        struct pstate_data *pstate = &all_cpu_data[dev->id]->pstate;
-       struct cpu_cacheinfo *cacheinfo = get_cpu_cacheinfo(dev->id);
 
        /*
         * The smaller the perf-to-frequency scaling factor, the larger the IPC
@@ -973,17 +988,8 @@ static int hybrid_get_cost(struct device *dev, unsigned long freq,
         * touching it in case some other CPUs of the same type can do the work
         * without it.
         */
-       if (cacheinfo) {
-               unsigned int i;
-
-               /* Check if L3 cache is there. */
-               for (i = 0; i < cacheinfo->num_leaves; i++) {
-                       if (cacheinfo->info_list[i].level == 3) {
-                               *cost += 2;
-                               break;
-                       }
-               }
-       }
+       if (hybrid_has_l3(dev->id))
+               *cost += 2;
 
        return 0;
 }