summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJavi Merino <javi.merino@arm.com>2016-04-06 19:30:18 +0100
committerEduardo Valentin <edubezval@gmail.com>2016-04-20 16:22:45 -0700
commitf9d038144a171d42e057143b247ff7a12a5b06f5 (patch)
treef369a61f4a975566158427a691cc509e6d3e9cb2
parentc0ff8aaae369559fbef0e9f2606a9ae92db14f2f (diff)
downloadlinux-f9d038144a171d42e057143b247ff7a12a5b06f5.tar.gz
linux-f9d038144a171d42e057143b247ff7a12a5b06f5.tar.xz
thermal: power_allocator: req_range multiplication should be a 64 bit type
req_range is declared as a u64 to cope with overflows in the multiplication of two u32. As both req_power and power_range are u32, we need to make sure the multiplication is done with u64 types. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Cc: Zhang Rui <rui.zhang@intel.com> Cc: Eduardo Valentin <edubezval@gmail.com> Signed-off-by: Javi Merino <javi.merino@arm.com> Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
-rw-r--r--drivers/thermal/power_allocator.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/thermal/power_allocator.c b/drivers/thermal/power_allocator.c
index 1246aa6fcab0..2f1a863a8e15 100644
--- a/drivers/thermal/power_allocator.c
+++ b/drivers/thermal/power_allocator.c
@@ -301,7 +301,7 @@ static void divvy_up_power(u32 *req_power, u32 *max_power, int num_actors,
capped_extra_power = 0;
extra_power = 0;
for (i = 0; i < num_actors; i++) {
- u64 req_range = req_power[i] * power_range;
+ u64 req_range = (u64)req_power[i] * power_range;
granted_power[i] = DIV_ROUND_CLOSEST_ULL(req_range,
total_req_power);