RE: drm/amd/display: Restructuring and cleaning up DML

From: Cheng, Tony
Date: Tue Nov 28 2017 - 22:34:34 EST


That code is to handle NAN (not a number) in float. Unfortunately our HW architect decided NAN is one of the way to determine if something isn't supported. We have feed this back to our HW team and they will look into improving this for next next generation.

-----Original Message-----
From: Dave Jones [mailto:davej@xxxxxxxxxxxxxxxxx]
Sent: Tuesday, November 28, 2017 10:06 PM
To: Linux Kernel Mailing List <linux-kernel@xxxxxxxxxxxxxxx>
Cc: Laktyushkin, Dmytro <Dmytro.Laktyushkin@xxxxxxx>; Cheng, Tony <Tony.Cheng@xxxxxxx>; Wentland, Harry <Harry.Wentland@xxxxxxx>; Deucher, Alexander <Alexander.Deucher@xxxxxxx>
Subject: Re: drm/amd/display: Restructuring and cleaning up DML

On Sat, Nov 18, 2017 at 12:02:01AM +0000, Linux Kernel wrote:
> Web: https://git.kernel.org/torvalds/c/6d04ee9dc10149db842d41de66eca201c9d91b60
> Commit: 6d04ee9dc10149db842d41de66eca201c9d91b60
> Parent: 19b7fe4a48efbe0f7e8c496b040c4eb16ff02313
> Refname: refs/heads/master
> Author: Dmytro Laktyushkin <Dmytro.Laktyushkin@xxxxxxx>
> AuthorDate: Wed Aug 23 16:43:17 2017 -0400 > Committer: Alex Deucher <alexander.deucher@xxxxxxx> > CommitDate: Sat Oct 21 16:45:24 2017 -0400 >
> drm/amd/display: Restructuring and cleaning up DML
>
> Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@xxxxxxx>
> Reviewed-by: Tony Cheng <Tony.Cheng@xxxxxxx>
> Acked-by: Harry Wentland <Harry.Wentland@xxxxxxx>
> Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx>
> ---


> diff --git a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calc_math.c b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calc_math.c
> index a18474437990..b6abe0f3bb15 100644 > --- a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calc_math.c
> +++ b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calc_math.c
> @@ -27,20 +27,36 @@
>
> float dcn_bw_mod(const float arg1, const float arg2) > {
> + if (arg1 != arg1)
> + return arg2;
> + if (arg2 != arg2)
> + return arg1;
> return arg1 - arg1 * ((int) (arg1 / arg2));
> }
>
> float dcn_bw_min2(const float arg1, const float arg2) > {
> + if (arg1 != arg1)
> + return arg2;
> + if (arg2 != arg2)
> + return arg1;
> return arg1 < arg2 ? arg1 : arg2;
> }
>
> unsigned int dcn_bw_max(const unsigned int arg1, const unsigned int arg2) > {
> + if (arg1 != arg1)
> + return arg2;
> + if (arg2 != arg2)
> + return arg1;
> return arg1 > arg2 ? arg1 : arg2;
> }
> float dcn_bw_max2(const float arg1, const float arg2) > {
> + if (arg1 != arg1)
> + return arg2;
> + if (arg2 != arg2)
> + return arg1;
> return arg1 > arg2 ? arg1 : arg2;
> }

This looks really, really bizarre. What was the intention here ?

(This, and a bunch of other stuff in this driver picked up by Coverity, sign up at scan.coverity.com if you want access, and I'll approve.)

Dave