From d7e3872da04ba93b9add8bcc08c599d78802ca81 Mon Sep 17 00:00:00 2001 From: Philip Elcan Date: Tue, 28 May 2019 17:35:37 -0400 Subject: [PATCH] gpu: nvgpu: add safe u32 to u8/s8 cast ops Add safe casts ops: - nvgpu_safe_cast_u32_to_u8 - nvgpu_safe_cast_u32_to_s8 JIRA NVGPU-3519 Change-Id: I4f8fe0ce80de7849183b00421b39495ef0365037 Signed-off-by: Philip Elcan Reviewed-on: https://git-master.nvidia.com/r/2126825 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/include/nvgpu/safe_ops.h | 18 ++++++++++++++++++ drivers/gpu/nvgpu/include/nvgpu/types.h | 6 ++++++ 2 files changed, 24 insertions(+) diff --git a/drivers/gpu/nvgpu/include/nvgpu/safe_ops.h b/drivers/gpu/nvgpu/include/nvgpu/safe_ops.h index 8aa40bede..e333aa9d0 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/safe_ops.h +++ b/drivers/gpu/nvgpu/include/nvgpu/safe_ops.h @@ -172,6 +172,24 @@ static inline u16 nvgpu_safe_cast_u32_to_u16(u32 ui_a) } } +static inline u8 nvgpu_safe_cast_u32_to_u8(u32 ui_a) +{ + if (ui_a > UCHAR_MAX) { + BUG(); + } else { + return (u8)ui_a; + } +} + +static inline s8 nvgpu_safe_cast_u32_to_s8(u32 ui_a) +{ + if (ui_a > SCHAR_MAX) { + BUG(); + } else { + return (s8)ui_a; + } +} + static inline s32 nvgpu_safe_cast_u32_to_s32(u32 ui_a) { if (ui_a > INT_MAX) { diff --git a/drivers/gpu/nvgpu/include/nvgpu/types.h b/drivers/gpu/nvgpu/include/nvgpu/types.h index 670942f02..be0cf297d 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/types.h +++ b/drivers/gpu/nvgpu/include/nvgpu/types.h @@ -73,4 +73,10 @@ #define U64_MAX U64(~U64(0)) #endif +#if defined(__KERNEL__) && !defined(UCHAR_MAX) +/* Linux doesn't define these max values, and we can't use limits.h */ +#define UCHAR_MAX U8_MAX +#define SCHAR_MAX (U8_MAX/2) +#endif + #endif /* NVGPU_TYPES_H */