Commit 374216ee authored by Chris Wilson's avatar Chris Wilson 🤔

igt/perf_pmu: Avoid underflow in measured_sleep()

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's avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin's avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
parent fe9cf277
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment