From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Stancek Date: Wed, 16 Oct 2019 11:51:30 +0200 Subject: [LTP] [PATCH] timer_getoverrun/2-3: increase tolerance for overshoot In-Reply-To: <77c71c80-0ca2-6f67-d628-d337a13539d7@jv-coder.de> References: <77c71c80-0ca2-6f67-d628-d337a13539d7@jv-coder.de> Message-ID: <81c89bbde27ede0ef4291df60186bdcd293a3db5.1571219422.git.jstancek@redhat.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ltp@lists.linux.it 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 Acked-by: Joerg Vehlow Signed-off-by: Jan Stancek --- .../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