]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
thermal: gov_power_allocator: Fix incorrect calculation in divvy_up_power()
authorYu-Che Cheng <giver@chromium.org>
Wed, 19 Feb 2025 07:07:48 +0000 (15:07 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 21 Feb 2025 17:13:10 +0000 (18:13 +0100)
divvy_up_power() should use weighted_req_power instead of req_power to
calculate granted_power. Otherwise, granted_power may be unexpected as
the denominator total_req_power is a weighted sum.

This is a mistake made during the previous refactor.

Replace req_power with weighted_req_power in divvy_up_power()
calculation.

Fixes: 912e97c67cc3 ("thermal: gov_power_allocator: Move memory allocation out of throttle()")
Signed-off-by: Yu-Che Cheng <giver@chromium.org>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Link: https://patch.msgid.link/20250219-fix-power-allocator-calc-v1-1-48b860291919@chromium.org
[ rjw: Subject and changelog edits ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/thermal/gov_power_allocator.c

index 3b644de3292e2e755c43c79f575be76306a6bd88..3b626db55b2b95b996ad907008fad9acbe991264 100644 (file)
@@ -370,7 +370,7 @@ static void divvy_up_power(struct power_actor *power, int num_actors,
 
        for (i = 0; i < num_actors; i++) {
                struct power_actor *pa = &power[i];
-               u64 req_range = (u64)pa->req_power * power_range;
+               u64 req_range = (u64)pa->weighted_req_power * power_range;
 
                pa->granted_power = DIV_ROUND_CLOSEST_ULL(req_range,
                                                          total_req_power);