[U-Boot] [PATCH] fix print_size printing fractional gigabyte numbers on 32-bit platforms
    Scott Wood 
    scottwood at freescale.com
       
    Wed Mar 31 00:19:29 CEST 2010
    
    
  
Timur Tabi wrote:
> Scott Wood wrote:
>> In changing "d" from phys_size_t to unsigned long, I think you're 
>> introducing overflow in "n * d" (consider 5.5G rather than 1.5G).
>>
>> Wouldn't a more straightforward fix, that doesn't affect the function 
>> signature, be to just change "10 *" to "10ULL *"?
> 
> I don't see how that suggestion would make the code any different.
It would make the 10 * (...) product 64-bit regardless of phys_size_t, 
without changing the function signature (overflow is an internal 
implementation detail).
>  Here's the expression:
> 
> 	(10 * (size - (n * d)) + (d / 2) ) / d;
> 
> I made 'size' into a u64, and I assume that the compiler will evaluate every other subexpression as a u64.  That may be wrong.
The "n * d" subexpression does not involve size, and thus will not be 
64-bit.
> However, changing 10 to 10ULL makes the same assumption.
The difference is that "d" remains phys_size_t, rather than being 
converted to unsigned long.
-Scott
    
    
More information about the U-Boot
mailing list