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:[email protected]] 
Sent: Tuesday, November 28, 2017 10:06 PM
To: Linux Kernel Mailing List <[email protected]>
Cc: Laktyushkin, Dmytro <[email protected]>; Cheng, Tony 
<[email protected]>; Wentland, Harry <[email protected]>; Deucher, 
Alexander <[email protected]>
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 <[email protected]>
 > AuthorDate: Wed Aug 23 16:43:17 2017 -0400  > Committer:  Alex Deucher 
 > <[email protected]>  > CommitDate: Sat Oct 21 16:45:24 2017 -0400  > 
 >     drm/amd/display: Restructuring and cleaning up DML
 >     
 >     Signed-off-by: Dmytro Laktyushkin <[email protected]>
 >     Reviewed-by: Tony Cheng <[email protected]>
 >     Acked-by: Harry Wentland <[email protected]>
 >     Signed-off-by: Alex Deucher <[email protected]>
 > ---


 > 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

Reply via email to