Builds ok for Android now. I get an assert when I run it on MRD7/Gmin but This may be expected. I'll put it on my list of tests to look into. Tim > -----Original Message----- > From: Tvrtko Ursulin [mailto:tvrtko.ursulin@xxxxxxxxxxxxxxx] > Sent: Tuesday, July 22, 2014 11:15 AM > To: Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > Cc: Tvrtko Ursulin; Ursulin, Tvrtko; Gore, Tim > Subject: [PATCH] igt/gem_userptr_blits: Fix multi-threaded mm stress tester > > Two parts to the fix: > 1. Do not use pthread_cancel since not available on Android. > 2. Do not assert in the thread since that does not get propagated > to the process. Rather pass out any failures so we know test > did not work as expected. > > Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > Cc: Tim Gore <tim.gore@xxxxxxxxx> > --- > tests/gem_userptr_blits.c | 37 ++++++++++++++++++++++++++----------- > 1 file changed, 26 insertions(+), 11 deletions(-) > > diff --git a/tests/gem_userptr_blits.c b/tests/gem_userptr_blits.c index > 2a52856..3277096 100644 > --- a/tests/gem_userptr_blits.c > +++ b/tests/gem_userptr_blits.c > @@ -1137,21 +1137,32 @@ static void test_unmap_cycles(int fd, int > expected) > test_unmap(fd, expected); > } > > +struct stress_thread_data { > + unsigned int stop; > + int exit_code; > +}; > + > static void *mm_stress_thread(void *data) { > - void *ptr; > - int ret; > + struct stress_thread_data *stdata = (struct stress_thread_data > *)data; > + void *ptr; > + int ret; > > - for (;;) { > + while (!stdata->stop) { > ptr = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, > MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); > - igt_assert(ptr != MAP_FAILED); > + if (ptr == MAP_FAILED) { > + stdata->exit_code = -EFAULT; > + break; > + } > ret = munmap(ptr, PAGE_SIZE); > - igt_assert(ret == 0); > - pthread_testcancel(); > - } > + if (ret) { > + stdata->exit_code = errno; > + break; > + } > + } > > - return NULL; > + return NULL; > } > > static void test_stress_mm(int fd) > @@ -1161,10 +1172,13 @@ static void test_stress_mm(int fd) > unsigned int loops = 100000; > uint32_t handle; > void *ptr; > + struct stress_thread_data stdata; > + > + memset(&stdata, 0, sizeof(stdata)); > > igt_assert(posix_memalign(&ptr, PAGE_SIZE, PAGE_SIZE) == 0); > > - ret = pthread_create(&t, NULL, mm_stress_thread, NULL); > + ret = pthread_create(&t, NULL, mm_stress_thread, &stdata); > igt_assert(ret == 0); > > while (loops--) { > @@ -1176,10 +1190,11 @@ static void test_stress_mm(int fd) > > free(ptr); > > - ret = pthread_cancel(t); > - igt_assert(ret == 0); > + stdata.stop = 1; > ret = pthread_join(t, NULL); > igt_assert(ret == 0); > + > + igt_assert(stdata.exit_code == 0); > } > > unsigned int total_ram; > -- > 1.9.3 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx