[PATCH 37/43] drm/amd/display: Fix overlow issue

Harry Wentland harry.wentland at amd.com
Thu Nov 23 19:53:10 UTC 2017


From: Vitaly Prosyak <vitaly.prosyak at amd.com>

Signed-off-by: Vitaly Prosyak <vitaly.prosyak at amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng at amd.com>
Acked-by: Harry Wentland <harry.wentland at amd.com>
---
 drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c b/drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c
index 13f8b8c02212..169fe42f29cd 100644
--- a/drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c
+++ b/drivers/gpu/drm/amd/display/dc/basics/fixpt31_32.c
@@ -550,6 +550,9 @@ static inline uint32_t ux_dy(
 	result <<= fractional_bits;
 	/* 5. shrink fixed point fractional part to of fractional_bits width*/
 	fractional_part >>= FIXED31_32_BITS_PER_FRACTIONAL_PART - fractional_bits;
+	/*handle the case when overflow, for example 1.0 in u14 is 0x3fff*/
+	if (value > 0 && result == 0 && integer_bits ==  0 && fractional_part == 0)
+		fractional_part = (1<<fractional_bits) - 1;
 	/* 6. merge the result */
 	return result | fractional_part;
 }
@@ -569,11 +572,11 @@ uint32_t dal_fixed31_32_u0d19(
 uint32_t dal_fixed31_32_u0d14(
 	struct fixed31_32 arg)
 {
-	return ux_dy(arg.value, 1, 14);
+	return ux_dy(arg.value, 0, 14);
 }
 
 uint32_t dal_fixed31_32_u0d10(
 	struct fixed31_32 arg)
 {
-	return ux_dy(arg.value, 1, 10);
+	return ux_dy(arg.value, 0, 10);
 }
-- 
2.14.1



More information about the amd-gfx mailing list