[LTP] [PATCH] timer_getoverrun/2-3: increase tolerance for overshoot
Jan Stancek
jstancek@redhat.com
Wed Oct 16 11:51:30 CEST 2019
Joerg reports that test fails on systems with low timer precision (qemu-arm64,
4ms timer precision) due to way we calculate maximum number of overruns.
If the expected overruns is less than 200, there is no tollerance.
Allow up to ~50ms of extra overruns.
Reported-by: Joerg Vehlow <joerg.vehlow@aox-tech.de>
Acked-by: Joerg Vehlow <joerg.vehlow@aox-tech.de>
Signed-off-by: Jan Stancek <jstancek@redhat.com>
---
.../conformance/interfaces/timer_getoverrun/2-3.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/testcases/open_posix_testsuite/conformance/interfaces/timer_getoverrun/2-3.c b/testcases/open_posix_testsuite/conformance/interfaces/timer_getoverrun/2-3.c
index 96b7d01e6ffe..66f8b583a5a6 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/timer_getoverrun/2-3.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/timer_getoverrun/2-3.c
@@ -94,11 +94,17 @@ int main(void)
valuensec = tsres.tv_nsec;
intervalnsec = 2 * valuensec;
- //expectedoverruns = (1000000000 - valuensec) / intervalnsec;
expectedoverruns = 1000000000 / intervalnsec - 1;
+ /*
+ * waking up from sleep isn't instant, we can overshoot.
+ * Allow up to ~50ms worth of extra overruns.
+ */
+ fudge = 50000000 / intervalnsec + 1;
+
printf("value = %d sec, interval = %d nsec, "
- "expected overruns = %d\n", 1, intervalnsec, expectedoverruns);
+ "expected overruns = %d, fudge = %d\n", 1,
+ intervalnsec, expectedoverruns, fudge);
its.it_interval.tv_sec = 0;
its.it_interval.tv_nsec = intervalnsec;
@@ -146,7 +152,6 @@ int main(void)
* extra expiries after the nanosleep completes so do
* a range check.
*/
- fudge = expectedoverruns / 100;
if (overruns >= expectedoverruns && overruns < expectedoverruns + fudge) {
printf("Test PASSED\n");
return PTS_PASS;
--
1.8.3.1
More information about the ltp
mailing list