diff options
-rw-r--r-- | tests/i915/gem_mmap_gtt.c | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/tests/i915/gem_mmap_gtt.c b/tests/i915/gem_mmap_gtt.c index 4ea54ef1..af87ebc3 100644 --- a/tests/i915/gem_mmap_gtt.c +++ b/tests/i915/gem_mmap_gtt.c @@ -57,30 +57,36 @@ set_domain_gtt(int fd, uint32_t handle) } static void * -mmap_bo(int fd, uint32_t handle) +mmap_bo(int fd, uint32_t handle, uint64_t size) { void *ptr; - ptr = gem_mmap__gtt(fd, handle, OBJECT_SIZE, PROT_READ | PROT_WRITE); + ptr = gem_mmap__gtt(fd, handle, size, PROT_READ | PROT_WRITE); return ptr; } static void * -create_pointer(int fd) +create_pointer_size(int fd, uint64_t size) { uint32_t handle; void *ptr; - handle = gem_create(fd, OBJECT_SIZE); + handle = gem_create(fd, size); - ptr = mmap_bo(fd, handle); + ptr = mmap_bo(fd, handle, size); gem_close(fd, handle); return ptr; } +static void * +create_pointer(int fd) +{ + return create_pointer_size(fd, OBJECT_SIZE); +} + static void test_access(int fd) { @@ -482,7 +488,7 @@ test_write_gtt(int fd) dst = gem_create(fd, OBJECT_SIZE); /* prefault object into gtt */ - dst_gtt = mmap_bo(fd, dst); + dst_gtt = mmap_bo(fd, dst, OBJECT_SIZE); set_domain_gtt(fd, dst); memset(dst_gtt, 0, OBJECT_SIZE); munmap(dst_gtt, OBJECT_SIZE); @@ -972,10 +978,16 @@ thread_fault_concurrent(void *closure) int n; for (n = 0; n < 32; n++) { + unsigned int id = (n + t->id) % 32; + uint32_t sz = *t->ptr[id] - 1; + int idx = rand() % sz + 1; + if (n & 1) - *t->ptr[(n + t->id) % 32] = val; + t->ptr[id][idx] = val; else - val = *t->ptr[(n + t->id) % 32]; + val = t->ptr[id][idx]; + + val++; } return NULL; @@ -989,7 +1001,10 @@ test_fault_concurrent(int fd) int n; for (n = 0; n < 32; n++) { - ptr[n] = create_pointer(fd); + uint32_t sz = (n + 1) << 19; /* 512KiB increments */ + + ptr[n] = create_pointer_size(fd, sz); + *ptr[n] = sz / sizeof(uint32_t); /* num_elems for convenience */ } for (n = 0; n < 64; n++) { @@ -998,12 +1013,13 @@ test_fault_concurrent(int fd) pthread_create(&thread[n].thread, NULL, thread_fault_concurrent, &thread[n]); } + sleep(2); + for (n = 0; n < 64; n++) pthread_join(thread[n].thread, NULL); - for (n = 0; n < 32; n++) { - munmap(ptr[n], OBJECT_SIZE); - } + for (n = 0; n < 32; n++) + munmap(ptr[n], *ptr[n] * sizeof(uint32_t)); } static void |