From: Daniel Vetter Date: Sun, 19 Jan 2014 21:15:13 +0000 (+0100) Subject: tests/gem_fd_exhaustion: Make it work X-Git-Tag: intel-gpu-tools-1.6~169 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5b9147513029ca1e1eaf2c028e6f868adc3359f6;p=profile%2Fextras%2Fintel-gpu-tools.git tests/gem_fd_exhaustion: Make it work - We need to drop root to actually hit the limits. This requires us to fork the actual test since otherwise the exit handlers (which require root) fail the entire test. - Don't assert that the gem create ioctl succeeds, it won't on the final run of the loop. Signed-off-by: Daniel Vetter --- diff --git a/tests/gem_fd_exhaustion.c b/tests/gem_fd_exhaustion.c index 77faff2..afaa100 100644 --- a/tests/gem_fd_exhaustion.c +++ b/tests/gem_fd_exhaustion.c @@ -57,27 +57,35 @@ igt_simple_main igt_assert(open("/dev/null", O_RDONLY) >= 0); - for (i = 0; ; i++) { - int tmp_fd = open("/dev/null", O_RDONLY); - uint32_t handle; + igt_fork(n, 1) { + igt_drop_root(); - if (tmp_fd >= 0 && i < FD_ARR_SZ) - fd_arr[i] = tmp_fd; + for (i = 0; ; i++) { + int tmp_fd = open("/dev/null", O_RDONLY); + uint32_t handle; - handle = gem_create(fd, 4096); - if (handle) - gem_close(fd, handle); + if (tmp_fd >= 0 && i < FD_ARR_SZ) + fd_arr[i] = tmp_fd; + handle = __gem_create(fd, 4096); + if (handle) + gem_close(fd, handle); - if (!handle || tmp_fd < 0) { - printf("fd exhaustion after %i rounds.\n", i); - break; + + if (tmp_fd < 0) { + /* Ensure we actually hit the failure path ... */ + igt_assert(handle == 0); + printf("fd exhaustion after %i rounds.\n", i); + break; + } } + + /* The child will free all the fds when exiting, so no need to + * clean up to mess to ensure that the parent can at least run + * the exit handlers. */ } - /* free a few fd so that the exit handlers can at least run. */ - for (i = 0; i < FD_ARR_SZ; i++) - close(fd_arr[i]); + igt_waitchildren(); close(fd); }