Tian, Feng [mailto:[email protected]] wrote:

]Hi, Andrew
]
]The change was proposed to solve incorrect truncation and overflow issue on 
old revision.
]
]The original code is:
]  Counter = (UINT32) DivU64x32Remainder (
]                       Microseconds * 10,
]                       gMetronome->TickPeriod,
]                       &Remainder
]                       );
]
]In original code, there is Microseconds * 10 which may be out of UINTN 
boundary. And Counter is forced to truncate to 32 bit,
]which may also bring issue.

It is good to see concern over integer overflow. So often it is just ignored. 
Here is an example. Which delay is longer:

MicroSecondDelay (5153376776577);
MicroSecondDelay (1);

Answer: the second one. The first malfunctions due to integer overflow.

Thanks,
Scott


]Thanks
]Feng
]
]-----Original Message-----
]From: Andrew Fish [mailto:[email protected]] 
]Sent: Tuesday, September 16, 2014 05:10
]To: [email protected]
]Subject: Re: [edk2] [PATCH 2/2] MdeModulePkg: CoreStall: improve accuracy in 
iterating branch
]
]
]On Sep 15, 2014, at 11:29 AM, Laszlo Ersek <[email protected]> wrote:
]
]> On 09/15/14 18:53, Andrew Fish wrote:
]>> 
]>> On Sep 15, 2014, at 12:00 AM, Tian, Feng <[email protected]> wrote:
]>> 
]>>> Hi, Laszlo
]>>> 
]>>> Here is our intention for the logic:
]>>> 
]>>> If Microseconds is greater than or equal to 0x1999999999999999ULL(about 
58,494 years), then the divide operation is performed
]first, which means we will lose some accuracy, but this is a very large delay 
request, so waiting a little bit extra in this
]extreme case is an acceptable compromise.  
]>>> 
]>>> So I would prefer not to add this patch if there is no real impact.
]>>> 
]>> 
]>> Was this issue caught by some static analysis tool?
]> 
]> Nikolai submitted a patch that simply caused me to look at the 
]> function in question. In 2005-2006 I had written a UDP data transfer 
]> program that was obsessed with accurate packet rate, time keeping, and 
]> preventing long-term drift (I still use it occasionally, if the link 
]> quality justifies it); hence my interest in fractional ticks.
]> 
]
]Sorry I slotted this in the wrong location. I wanted to ask about the initial 
patch that added 0x199999999999999ULL?
]
]>> Why do we need to have code to deal with something that could never 
]>> happen?
]> 
]> Well, such function arguments *could* happen. How the boot service 
]> should react is a different question. Technically the implementation 
]> matches the UEFI spec.
]> 
]> (Compare for example the select() specification in POSIX:
]> <http://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html
]> >
]> 
]>    Implementations may place limitations on the maximum timeout
]>    interval supported. All implementations shall support a maximum
]>    timeout interval of at least 31 days. If the timeout argument
]>    specifies a timeout interval greater than the implementation-
]>    defined maximum value, the maximum value shall be used as the
]>    actual timeout value. [...]
]> 
]> The next errata / release of the UEFI spec might want to state 
]> something like this too.)
]> 
]
]I was thinking that capping the max value would not be a bad idea. Thanks for 
the POSIX reference. 
]
]Thanks,
]
]Andrew Fish
]
]> Thanks,
]> Laszlo



------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce.
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to