[flashrom] [PATCH] Handle insufficient DOS timer precision
Carl-Daniel Hailfinger
c-d.hailfinger.devel.2006 at gmx.net
Sat May 22 16:22:04 CEST 2010
Handle insufficient DOS timer precision by measuring a 100 ms delay
instead of a 100 us delay. This should reduce the likelihood of flashrom
timer complaints from 100% to 50%. If you want less complaints, use 1000
ms instead. This is mostly a proof of concept and I'd appreciate tests.
Once I know which #defines to look for on MinGW and Cygwin, I can modify
the #if to cover them as well.
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
Index: flashrom-measure_delay_precision_dos/udelay.c
===================================================================
--- flashrom-measure_delay_precision_dos/udelay.c (Revision 1008)
+++ flashrom-measure_delay_precision_dos/udelay.c (Arbeitskopie)
@@ -93,7 +93,19 @@
* a scheduler delay or something similar.
*/
for (i = 0; i < 4; i++) {
- if (measure_delay(100) < 90) {
+#if !defined(__DJGPP__)
+ timeusec = measure_delay(100);
+#else
+ /* This zero delay workaround should be active for
+ * DOS and Windows and maybe libpayload. The criterion
+ * here is insufficient (worse than 100 us) OS timer
+ * resolution which will result in measure_delay(100)=0
+ * whereas a longer delay (100 ms) will be sufficient
+ * to get a nonzero time measurement.
+ */
+ timeusec = measure_delay(100000) / 1000;
+#endif
+ if (timeusec < 90) {
msg_pdbg("delay more than 10%% too short, "
"recalculating... ");
goto recalibrate;
--
http://www.hailfinger.org/
More information about the flashrom
mailing list