int i;
struct cpu_power *cpower = NULL;
struct power_request req;
+ unsigned int w;
+ bool need_update = false;
for_each_online_cpu(i) {
cpower = (&per_cpu(cpu_power, i));
raw_spin_lock(&cpower->update_lock);
+ w = cpower->weight;
req = cpower->req;
cpower->req.time = 0;
+ cpower->weight = req.weight;
raw_spin_unlock(&cpower->update_lock);
if (should_update_next_weight(req.time)) {
pr_info("cpower req poped\n");
thermal_cpu_cdev_set_weight(req.cpu, req.weight);
+ need_update = true;
}
}
+ if (need_update)
+ thermal_all_zones_recalc_power();
+
sp->work_in_progress = false;
}
if (!cpower->operating)
return;
- sp = cpower->sched_power;
-
- /* Filter to frequent changes */
+ /* Filter to frequent changes or not needed*/
if (!should_update_next_weight(time))
return;
+ sp = cpower->sched_power;
+
raw_spin_lock(&cpower->update_lock);
cpower->req.weight = weight;
cpower->req.cpu = cpu;