Re: [Intel-gfx] [PATCH] igt/gem_userptr_blits: Fix multi-threaded mm stress tester

2014-07-24 Thread Gore, Tim

 -Original Message-
 From: Tvrtko Ursulin [mailto:tvrtko.ursu...@linux.intel.com]
 Sent: Tuesday, July 22, 2014 11:15 AM
 To: Intel-gfx@lists.freedesktop.org
 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.ursu...@intel.com
 Cc: Tim Gore tim.g...@intel.com
Reviewed-by: Tim Gore tim.g...@intel.com

Builds for Android now, and stress-mm test passes on linux. Fails for Android 
but this is a different issue.

 ---
  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 = 10;
   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@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH] igt/gem_userptr_blits: Fix multi-threaded mm stress tester

2014-07-24 Thread Chris Wilson
On Thu, Jul 24, 2014 at 08:19:19AM +, Gore, Tim wrote:
 
  -Original Message-
  From: Tvrtko Ursulin [mailto:tvrtko.ursu...@linux.intel.com]
  Sent: Tuesday, July 22, 2014 11:15 AM
  To: Intel-gfx@lists.freedesktop.org
  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.ursu...@intel.com
  Cc: Tim Gore tim.g...@intel.com
 Reviewed-by: Tim Gore tim.g...@intel.com
Pushed.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH] igt/gem_userptr_blits: Fix multi-threaded mm stress tester

2014-07-22 Thread Tvrtko Ursulin
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.ursu...@intel.com
Cc: Tim Gore tim.g...@intel.com
---
 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 = 10;
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@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH] igt/gem_userptr_blits: Fix multi-threaded mm stress tester

2014-07-22 Thread Gore, Tim
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.ursu...@linux.intel.com]
 Sent: Tuesday, July 22, 2014 11:15 AM
 To: Intel-gfx@lists.freedesktop.org
 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.ursu...@intel.com
 Cc: Tim Gore tim.g...@intel.com
 ---
  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 = 10;
   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@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx