igt/gem_sync: Enforce a timeout of 20s

The sync test is supposed to complete in 10s. But some bugs cause it to
run very, very slowly. As a defence against those, terminate the test if
we wait for more than 20s.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2016-02-26 22:11:10 +00:00
parent 3482925454
commit 754876378d
3 changed files with 19 additions and 1 deletions

View File

@ -1131,6 +1131,9 @@ void igt_exit(void)
kmsg(KERN_INFO "%s: exiting, ret=%d\n", command_str, igt_exitcode);
igt_debug("Exiting with status code %d\n", igt_exitcode);
for (int c = 0; c < num_test_children; c++)
kill(test_children[c], SIGKILL);
if (!test_with_subtests) {
struct timespec now;
const char *result;
@ -1401,6 +1404,20 @@ void igt_waitchildren(void)
igt_fail(err);
}
/**
* igt_waitchildren_timeout:
*
* Wait for all children forked with igt_fork, for a maximum of @seconds.
*
* Wraps igt_waitchildren() and igt_set_timeout()
*/
void igt_waitchildren_timeout(int seconds, const char *reason)
{
igt_set_timeout(seconds, reason);
igt_waitchildren();
igt_reset_timeout();
}
/* exit handler code */
#define MAX_SIGNALS 32
#define MAX_EXIT_HANDLERS 10

View File

@ -610,6 +610,7 @@ bool __igt_fork(void);
for (int child = 0; child < (num_children); child++) \
for (; __igt_fork(); exit(0))
void igt_waitchildren(void);
void igt_waitchildren_timeout(int seconds, const char *reason);
/**
* igt_helper_process:

View File

@ -155,7 +155,7 @@ sync_ring(int fd, unsigned ring, int num_children)
gem_close(fd, object.handle);
}
igt_waitchildren();
igt_waitchildren_timeout(20, NULL);
igt_assert_eq(intel_detect_and_clear_missed_interrupts(fd), 0);
}