sched/power: refactor update function
authorLukasz Luba <l.luba@partner.samsung.com>
Tue, 30 Oct 2018 14:05:17 +0000 (15:05 +0100)
committerLukasz Luba <l.luba@partner.samsung.com>
Fri, 17 May 2019 07:15:43 +0000 (09:15 +0200)
The update function must handle a few types of requests
which are reconized based on 'flags'.
Add switch which trigger different paths in the code.

Signed-off-by: Lukasz Luba <l.luba@partner.samsung.com>
kernel/sched/power.c
kernel/sched/sched.h

index 89e447d442cdb08e79b56de2b568d13d6a5d62a8..808d8db5c02db6e339f000d6ae571835cdc48771 100644 (file)
@@ -273,6 +273,21 @@ static void sched_power_irq_work(struct irq_work *irq_work)
        kthread_queue_work(&power->worker, &power->work);
 }
 
+static void
+sched_power_update_cpu_weight(struct cpu_power *cpower, int cpu, int weight,
+                             int flags, int time)
+{
+       struct sched_power *sp;
+
+       raw_spin_lock(&cpower->update_lock);
+       cpower->req.weight = weight;
+       cpower->req.cpu = cpu;
+       cpower->req.time = time;
+       cpower->req.flags = flags;
+       raw_spin_unlock(&cpower->update_lock);
+}
+
+
 static void sched_power_update(struct update_sched_power *update, int cpu,
                               int weight, int flags, int time)
 {
@@ -287,14 +302,18 @@ static void sched_power_update(struct update_sched_power *update, int cpu,
        if (!should_update_next_weight(time, flags))
                return;
 
-       sp = cpower->sched_power;
+       switch (flags) {
+       case SCHED_POWER_CPU_WEIGHT:
+               sched_power_update_cpu_weight(cpower, cpu, weight, flags, time);
+               break;
+       case SCHED_POWER_CLUSTER_WEIGHT:
 
-       raw_spin_lock(&cpower->update_lock);
-       cpower->req.weight = weight;
-       cpower->req.cpu = cpu;
-       cpower->req.time = time;
-       cpower->req.flags = flags;
-       raw_spin_unlock(&cpower->update_lock);
+               break;
+       default:
+               return;
+       }
+
+       sp = cpower->sched_power;
 
        if (!sp->work_in_progress) {
                sp->work_in_progress = true;
index ebaf42e81afae9d93b510379033442868d5ffdb9..0b8f8505d3bcdba998c83bb83110f01806950c6e 100644 (file)
@@ -2246,7 +2246,9 @@ unsigned long scale_irq_capacity(unsigned long util, unsigned long irq, unsigned
 #endif
 
 #define SCHED_POWER_FORCE_UPDATE_RT 0x01
-#define SCHED_POWER_CLUSTER_REQ 0x2
+#define SCHED_POWER_CPU_WEIGHT 0x2
+#define SCHED_POWER_CLUSTER_WEIGHT 0x4
+
 #ifdef CONFIG_THERMAL
 struct update_sched_power {
        void (*func)(struct update_sched_power *, int, int, int, int);
@@ -2269,7 +2271,7 @@ static inline
 void sched_power_change_cluster_weight(int cpu, int weight, int flags)
 {
        sched_power_change_cpu_weight(cpu, weight, flags |
-                                     SCHED_POWER_CLUSTER_REQ);
+                                     SCHED_POWER_CLUSTER_WEIGHT);
 }
 #else
 static inline