]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 7 Mar 2025 17:25:34 +0000 (18:25 +0100)
[ Upstream commit 4ecaa75771a75f2b78a431bf67dea165d19d72a6 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/thermal/gov_power_allocator.c

index 1b2345a697c5a0338e7f62484356fcb23737ea03..d59549e616399c3c309bc95f617222920f3008b4 100644 (file)
@@ -364,7 +364,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);