diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2016-03-01 13:22:03 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2016-03-01 13:25:07 +0000 |
commit | 094e0cbabb9615c87d8e813a91f158fe439b536d (patch) | |
tree | 1faf878f8caa2155b7fb13d1dece68e88917ecfc /tests | |
parent | aed69b56d4c63a19594440be6679307b2781ae2c (diff) |
igt/gem_concurrent_blit: Deglobalify num_buffers
More num_buffers onto the local struct passed down into the tests to
avoid the issue with having to modify the global value inside the tests
leading to hilarity if the test asserts.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/gem_concurrent_all.c | 136 |
1 files changed, 73 insertions, 63 deletions
diff --git a/tests/gem_concurrent_all.c b/tests/gem_concurrent_all.c index 8718f169..a987ed8d 100644 --- a/tests/gem_concurrent_all.c +++ b/tests/gem_concurrent_all.c @@ -54,18 +54,18 @@ IGT_TEST_DESCRIPTION("Test of pread/pwrite/mmap behavior when writing to active" " buffers."); int fd, devid, gen; -struct intel_batchbuffer *batch; int all; int pass; struct buffers { const struct access_mode *mode; drm_intel_bufmgr *bufmgr; + struct intel_batchbuffer *batch; drm_intel_bo **src, **dst; drm_intel_bo *snoop, *spare; uint32_t *tmp; int width, height, size; - int count; + int count, num_buffers; }; #define MIN_BUFFERS 3 @@ -284,6 +284,8 @@ userptr_cmp_bo(struct buffers *b, drm_intel_bo *bo, uint32_t val) static void userptr_release_bo(drm_intel_bo *bo) { + igt_assert(bo->virtual); + munmap(bo->virtual, bo->size); bo->virtual = NULL; @@ -388,6 +390,7 @@ static void dmabuf_release_bo(drm_intel_bo *bo) { struct dmabuf *dmabuf = bo->virtual; + igt_assert(dmabuf); munmap(dmabuf->map, bo->size); close(dmabuf->fd); @@ -468,6 +471,8 @@ wc_create_bo(drm_intel_bufmgr *bufmgr, int width, int height) static void wc_release_bo(drm_intel_bo *bo) { + igt_assert(bo->virtual); + munmap(bo->virtual, bo->size); bo->virtual = NULL; @@ -668,15 +673,17 @@ const struct access_mode { }, }; -int num_buffers; igt_render_copyfunc_t rendercopy; -static void *buffers_init(struct buffers *data, - const struct access_mode *mode, - int width, int height, - int _fd, int enable_reuse) +static void buffers_init(struct buffers *data, + const struct access_mode *mode, + int num_buffers, + int width, int height, + int _fd, int enable_reuse) { + memset(data, 0, sizeof(*data)); data->mode = mode; + data->num_buffers = num_buffers; data->count = 0; data->width = width; @@ -694,15 +701,17 @@ static void *buffers_init(struct buffers *data, if (enable_reuse) drm_intel_bufmgr_gem_enable_reuse(data->bufmgr); - return intel_batchbuffer_alloc(data->bufmgr, devid); + data->batch = intel_batchbuffer_alloc(data->bufmgr, devid); + igt_assert(data->batch); } static void buffers_destroy(struct buffers *data) { - if (data->count == 0) + int count = data->count; + if (count == 0) return; - for (int i = 0; i < data->count; i++) { + for (int i = 0; i < count; i++) { data->mode->release_bo(data->src[i]); data->mode->release_bo(data->dst[i]); } @@ -711,13 +720,14 @@ static void buffers_destroy(struct buffers *data) data->count = 0; } -static void buffers_create(struct buffers *data, - int count) +static void buffers_create(struct buffers *data) { + int count = data->num_buffers; int width = data->width, height = data->height; igt_assert(data->bufmgr); buffers_destroy(data); + igt_assert(data->count == 0); for (int i = 0; i < count; i++) { data->src[i] = @@ -739,12 +749,11 @@ static void buffers_fini(struct buffers *data) free(data->tmp); free(data->src); - data->src = NULL; - data->dst = NULL; - intel_batchbuffer_free(batch); + intel_batchbuffer_free(data->batch); drm_intel_bufmgr_destroy(data->bufmgr); - data->bufmgr = NULL; + + memset(data, 0, sizeof(*data)); } typedef void (*do_copy)(struct buffers *b, drm_intel_bo *dst, drm_intel_bo *src); @@ -768,7 +777,7 @@ static void render_copy_bo(struct buffers *b, drm_intel_bo *dst, drm_intel_bo *s drm_intel_bo_get_tiling(dst, &d.tiling, &swizzle); drm_intel_bo_get_tiling(src, &s.tiling, &swizzle); - rendercopy(batch, NULL, + rendercopy(b->batch, NULL, &s, 0, 0, b->width, b->height, &d, 0, 0); @@ -776,7 +785,7 @@ static void render_copy_bo(struct buffers *b, drm_intel_bo *dst, drm_intel_bo *s static void blt_copy_bo(struct buffers *b, drm_intel_bo *dst, drm_intel_bo *src) { - intel_blt_copy(batch, + intel_blt_copy(b->batch, src, 0, 0, 4*b->width, dst, 0, 0, 4*b->width, b->width, b->height, 32); @@ -1244,32 +1253,26 @@ static void __run_forked(struct buffers *buffers, do_hang do_hang_func) { - const int old_num_buffers = num_buffers; + int _num_buffers = buffers->num_buffers; - num_buffers /= num_children; - num_buffers += MIN_BUFFERS; + _num_buffers /= num_children; + _num_buffers += MIN_BUFFERS; igt_fork(child, num_children) { /* recreate process local variables */ - buffers->count = 0; fd = drm_open_driver(DRIVER_INTEL); + buffers_init(buffers, buffers->mode, _num_buffers, + buffers->width, buffers->height, + fd, true); - batch = buffers_init(buffers, buffers->mode, - buffers->width, buffers->height, - fd, true); - - buffers_create(buffers, num_buffers); + buffers_create(buffers); for (pass = 0; pass < loops; pass++) do_test_func(buffers, do_copy_func, do_hang_func); pass = 0; - - buffers_fini(buffers); } igt_waitchildren(); igt_assert_eq(intel_detect_and_clear_missed_interrupts(fd), 0); - - num_buffers = old_num_buffers; } static void run_forked(struct buffers *buffers, @@ -1336,6 +1339,7 @@ static void rcs_require(void) static void run_basic_modes(const char *prefix, const struct access_mode *mode, + const int num_buffers, const char *suffix, run_wrap run_wrap_func) { @@ -1369,27 +1373,27 @@ run_basic_modes(const char *prefix, struct buffers buffers; igt_fixture - batch = buffers_init(&buffers, mode, - 512, 512, fd, - run_wrap_func != run_child); + buffers_init(&buffers, mode, num_buffers, + 512, 512, fd, + run_wrap_func != run_child); igt_subtest_f("%s-%s-%s-sanitycheck0%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_basic0, p->copy, h->hang); } igt_subtest_f("%s-%s-%s-sanitycheck1%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_basic1, p->copy, h->hang); } igt_subtest_f("%s-%s-%s-sanitycheckN%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_basicN, p->copy, h->hang); } @@ -1397,7 +1401,7 @@ run_basic_modes(const char *prefix, /* try to overwrite the source values */ igt_subtest_f("%s-%s-%s-overwrite-source-one%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_overwrite_source__one, p->copy, h->hang); @@ -1405,7 +1409,7 @@ run_basic_modes(const char *prefix, igt_subtest_f("%s-%s-%s-overwrite-source%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_overwrite_source, p->copy, h->hang); @@ -1413,7 +1417,7 @@ run_basic_modes(const char *prefix, igt_subtest_f("%s-%s-%s-overwrite-source-read-bcs%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_overwrite_source_read_bcs, p->copy, h->hang); @@ -1422,7 +1426,7 @@ run_basic_modes(const char *prefix, igt_subtest_f("%s-%s-%s-overwrite-source-read-rcs%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); igt_require(rendercopy); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_overwrite_source_read_rcs, p->copy, h->hang); @@ -1430,7 +1434,7 @@ run_basic_modes(const char *prefix, igt_subtest_f("%s-%s-%s-overwrite-source-rev%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_overwrite_source__rev, p->copy, h->hang); @@ -1440,7 +1444,7 @@ run_basic_modes(const char *prefix, igt_subtest_f("%s-%s-%s-intermix-rcs%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); igt_require(rendercopy); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_intermix_rcs, p->copy, h->hang); @@ -1448,7 +1452,7 @@ run_basic_modes(const char *prefix, igt_subtest_f("%s-%s-%s-intermix-bcs%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); igt_require(rendercopy); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_intermix_bcs, p->copy, h->hang); @@ -1456,7 +1460,7 @@ run_basic_modes(const char *prefix, igt_subtest_f("%s-%s-%s-intermix-both%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); igt_require(rendercopy); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_intermix_both, p->copy, h->hang); @@ -1465,7 +1469,7 @@ run_basic_modes(const char *prefix, /* try to read the results before the copy completes */ igt_subtest_f("%s-%s-%s-early-read%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_early_read, p->copy, h->hang); @@ -1474,7 +1478,7 @@ run_basic_modes(const char *prefix, /* concurrent reads */ igt_subtest_f("%s-%s-%s-read-read-bcs%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_read_read_bcs, p->copy, h->hang); @@ -1482,7 +1486,7 @@ run_basic_modes(const char *prefix, igt_subtest_f("%s-%s-%s-read-read-rcs%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); igt_require(rendercopy); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_read_read_rcs, p->copy, h->hang); @@ -1491,7 +1495,7 @@ run_basic_modes(const char *prefix, /* split copying between rings */ igt_subtest_f("%s-%s-%s-write-read-bcs%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_write_read_bcs, p->copy, h->hang); @@ -1499,7 +1503,7 @@ run_basic_modes(const char *prefix, igt_subtest_f("%s-%s-%s-write-read-rcs%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); igt_require(rendercopy); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_write_read_rcs, p->copy, h->hang); @@ -1508,7 +1512,7 @@ run_basic_modes(const char *prefix, /* and finally try to trick the kernel into loosing the pending write */ igt_subtest_f("%s-%s-%s-gpu-read-after-write%s%s", prefix, mode->name, p->prefix, suffix, h->suffix) { p->require(); - buffers_create(&buffers, num_buffers); + buffers_create(&buffers); run_wrap_func(&buffers, do_gpu_read_after_write, p->copy, h->hang); @@ -1521,7 +1525,10 @@ run_basic_modes(const char *prefix, } static void -run_modes(const char *style, const struct access_mode *mode, unsigned allow_mem) +run_modes(const char *style, + const struct access_mode *mode, + const int num_buffers, + unsigned allow_mem) { if (!igt_only_list_subtests()) { if (mode->require && !mode->require()) @@ -1534,13 +1541,15 @@ run_modes(const char *style, const struct access_mode *mode, unsigned allow_mem) return; } - run_basic_modes(style, mode, "", run_single); - run_basic_modes(style, mode, "-child", run_child); - run_basic_modes(style, mode, "-forked", run_forked); + run_basic_modes(style, mode, num_buffers, "", run_single); + run_basic_modes(style, mode, num_buffers, "-child", run_child); + run_basic_modes(style, mode, num_buffers, "-forked", run_forked); igt_fork_signal_helper(); - run_basic_modes(style, mode, "-interruptible", run_interruptible); - run_basic_modes(style, mode, "-bomb", run_bomb); + run_basic_modes(style, mode, num_buffers, + "-interruptible", run_interruptible); + run_basic_modes(style, mode, num_buffers, + "-bomb", run_bomb); igt_stop_signal_helper(); } @@ -1558,6 +1567,7 @@ igt_main }, *c; uint64_t pin_sz = 0; void *pinned = NULL; + int num_buffers = 0; int i; igt_skip_on_simulation(); @@ -1582,7 +1592,7 @@ igt_main if (c->require()) { snprintf(name, sizeof(name), "%s%s", c->name, "tiny"); for (i = 0; i < ARRAY_SIZE(access_modes); i++) - run_modes(name, &access_modes[i], CHECK_RAM); + run_modes(name, &access_modes[i], num_buffers, CHECK_RAM); } igt_fixture { @@ -1592,7 +1602,7 @@ igt_main if (c->require()) { snprintf(name, sizeof(name), "%s%s", c->name, "small"); for (i = 0; i < ARRAY_SIZE(access_modes); i++) - run_modes(name, &access_modes[i], CHECK_RAM); + run_modes(name, &access_modes[i], num_buffers, CHECK_RAM); } igt_fixture { @@ -1602,7 +1612,7 @@ igt_main if (c->require()) { snprintf(name, sizeof(name), "%s%s", c->name, "thrash"); for (i = 0; i < ARRAY_SIZE(access_modes); i++) - run_modes(name, &access_modes[i], CHECK_RAM); + run_modes(name, &access_modes[i], num_buffers, CHECK_RAM); } igt_fixture { @@ -1612,7 +1622,7 @@ igt_main if (c->require()) { snprintf(name, sizeof(name), "%s%s", c->name, "global"); for (i = 0; i < ARRAY_SIZE(access_modes); i++) - run_modes(name, &access_modes[i], CHECK_RAM); + run_modes(name, &access_modes[i], num_buffers, CHECK_RAM); } igt_fixture { @@ -1622,7 +1632,7 @@ igt_main if (c->require()) { snprintf(name, sizeof(name), "%s%s", c->name, "full"); for (i = 0; i < ARRAY_SIZE(access_modes); i++) - run_modes(name, &access_modes[i], CHECK_RAM); + run_modes(name, &access_modes[i], num_buffers, CHECK_RAM); } igt_fixture { @@ -1644,7 +1654,7 @@ igt_main if (c->require()) { snprintf(name, sizeof(name), "%s%s", c->name, "swap"); for (i = 0; i < ARRAY_SIZE(access_modes); i++) - run_modes(name, &access_modes[i], CHECK_RAM | CHECK_SWAP); + run_modes(name, &access_modes[i], num_buffers, CHECK_RAM | CHECK_SWAP); } igt_fixture { |