mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 02:22:34 +03:00
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:
committed by
mobile promotions
parent
61fb688f1a
commit
ec571aa55c
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user