[Intel-gfx] [PATCH igt] igt/perf_pmu: Avoid underflow in measured_sleep()
Chris Wilson
chris at chris-wilson.co.uk
Wed Nov 22 20:14:23 UTC 2017
Be careful not to underflow into a very large positive usec value and so
sleep forever^W until boredom kicks in.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
---
tests/perf_pmu.c | 23 +++++++++--------------
1 file changed, 9 insertions(+), 14 deletions(-)
diff --git a/tests/perf_pmu.c b/tests/perf_pmu.c
index 5d5f2b30..e153aaf3 100644
--- a/tests/perf_pmu.c
+++ b/tests/perf_pmu.c
@@ -111,22 +111,17 @@ static void pmu_read_multi(int fd, unsigned int num, uint64_t *val)
*/
static unsigned int measured_usleep(unsigned int usec)
{
- uint64_t slept = 0;
-
- while (usec > 0) {
- struct timespec start = { };
- uint64_t this_sleep;
+ struct timespec ts = { };
+ unsigned int slept;
- igt_nsec_elapsed(&start);
- usleep(usec);
- this_sleep = igt_nsec_elapsed(&start);
- slept += this_sleep;
- if (this_sleep > usec * 1000)
- break;
- usec -= this_sleep;
- }
+ slept = igt_nsec_elapsed(&ts);
+ igt_assert(slept == 0);
+ do {
+ usleep(usec - slept);
+ slept = igt_nsec_elapsed(&ts) / 1000;
+ } while (slept < usec);
- return slept;
+ return igt_nsec_elapsed(&ts);
}
static unsigned int e2ring(int gem_fd, const struct intel_execution_engine2 *e)
--
2.15.0
More information about the Intel-gfx
mailing list