gpu: nvgpu: add safe math operations

Add functions which perform addition and subtraction of s32 type
in a safe way returning an error if operand type cannot correctly
hold the operation result.

JIRA NVGPU-3432

Change-Id: Id7546c0b799a04fb6e6816e9835e9150df3ad4e8
Signed-off-by: Vaibhav Kachore <vkachore@nvidia.com>
Signed-off-by: Nitin Kumbhar <nkumbhar@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/2122912
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Vaibhav Kachore
2019-05-21 18:56:26 +05:30
committed by mobile promotions
parent 61fb688f1a
commit ec571aa55c

View File

@@ -35,6 +35,16 @@ static inline u32 nvgpu_safe_add_u32(u32 ui_a, u32 ui_b)
}
}
static inline s32 nvgpu_safe_add_s32(s32 si_a, s32 si_b)
{
if (((si_b > 0) && (si_a > (INT_MAX - si_b))) ||
((si_b < 0) && (si_a < (INT_MIN - si_b)))) {
BUG();
} else {
return si_a + si_b;
}
}
static inline u64 nvgpu_safe_add_u64(u64 ul_a, u64 ul_b)
{
if (ULONG_MAX - ul_a < ul_b) {
@@ -53,6 +63,16 @@ static inline u32 nvgpu_safe_sub_u32(u32 ui_a, u32 ui_b)
}
}
static inline s32 nvgpu_safe_sub_s32(s32 si_a, s32 si_b)
{
if ((si_b > 0 && si_a < INT_MIN + si_b) ||
(si_b < 0 && si_a > INT_MAX + si_b)) {
BUG();
} else {
return si_a - si_b;
}
}
static inline u64 nvgpu_safe_sub_u64(u64 ul_a, u64 ul_b)
{
if (ul_a < ul_b) {