PM: EM: Extend em_perf_domain with a flag field
authorVincent Donnefort <vincent.donnefort@arm.com>
Wed, 8 Sep 2021 14:05:24 +0000 (15:05 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 5 Oct 2021 14:33:05 +0000 (16:33 +0200)
Merge the current "milliwatts" option into a "flag" field. This intends to
prepare the extension of this structure for inefficient states support in
the Energy Model.

Signed-off-by: Vincent Donnefort <vincent.donnefort@arm.com>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
include/linux/energy_model.h
kernel/power/energy_model.c

index 3641ca4acf04282779f19bd9d04c1aa6fe3e44c3..671440371a956d913677758346693b6b21128a13 100644 (file)
@@ -40,8 +40,7 @@ struct em_perf_state {
  * struct em_perf_domain - Performance domain
  * @table:             List of performance states, in ascending order
  * @nr_perf_states:    Number of performance states
- * @milliwatts:                Flag indicating the power values are in milli-Watts
- *                     or some other scale.
+ * @flags:             See "em_perf_domain flags"
  * @cpus:              Cpumask covering the CPUs of the domain. It's here
  *                     for performance reasons to avoid potential cache
  *                     misses during energy calculations in the scheduler
@@ -56,10 +55,18 @@ struct em_perf_state {
 struct em_perf_domain {
        struct em_perf_state *table;
        int nr_perf_states;
-       int milliwatts;
+       unsigned long flags;
        unsigned long cpus[];
 };
 
+/*
+ *  em_perf_domain flags:
+ *
+ *  EM_PERF_DOMAIN_MILLIWATTS: The power values are in milli-Watts or some
+ *  other scale.
+ */
+#define EM_PERF_DOMAIN_MILLIWATTS BIT(0)
+
 #define em_span_cpus(em) (to_cpumask((em)->cpus))
 
 #ifdef CONFIG_ENERGY_MODEL
index 6d843834753533681b9b873b263a058e6b013ec1..3a7d1573b2146aac26d25c0f4ab3590184485eb6 100644 (file)
@@ -56,7 +56,8 @@ DEFINE_SHOW_ATTRIBUTE(em_debug_cpus);
 static int em_debug_units_show(struct seq_file *s, void *unused)
 {
        struct em_perf_domain *pd = s->private;
-       char *units = pd->milliwatts ? "milliWatts" : "bogoWatts";
+       char *units = (pd->flags & EM_PERF_DOMAIN_MILLIWATTS) ?
+               "milliWatts" : "bogoWatts";
 
        seq_printf(s, "%s\n", units);
 
@@ -330,7 +331,8 @@ int em_dev_register_perf_domain(struct device *dev, unsigned int nr_states,
        if (ret)
                goto unlock;
 
-       dev->em_pd->milliwatts = milliwatts;
+       if (milliwatts)
+               dev->em_pd->flags |= EM_PERF_DOMAIN_MILLIWATTS;
 
        em_debug_create_pd(dev);
        dev_info(dev, "EM: created perf domain\n");