From 8dbd1fb9d4ecdd686dac13fb64f7af02480ea849 Mon Sep 17 00:00:00 2001 From: Daniel Vetter Date: Mon, 19 Aug 2013 11:09:25 +0200 Subject: [PATCH] lib/drmtest: igt_skip when drm_get_card fails Also add printf support to igt_skip to make sure there's always a reason why we fail a testcase. Signed-off-by: Daniel Vetter --- lib/drmtest.c | 33 +++++++++++++++++++-------------- lib/drmtest.h | 2 +- tests/gem_ctx_create.c | 5 ++--- tests/gem_seqno_wrap.c | 1 - tests/kms_flip.c | 2 -- 5 files changed, 22 insertions(+), 21 deletions(-) diff --git a/lib/drmtest.c b/lib/drmtest.c index 38d215db..99cac92f 100644 --- a/lib/drmtest.c +++ b/lib/drmtest.c @@ -181,23 +181,24 @@ int drm_get_card(void) int ret; ret = asprintf(&name, "/dev/dri/card%u", i); - if (ret == -1) - return -1; + igt_assert(ret != -1); + fd = open(name, O_RDWR); free(name); if (fd == -1) continue; - if (is_intel(fd)) { - close(fd); - break; - } + if (!is_intel(fd)) + continue; close(fd); + return i; } - return i; + igt_skip("No intel gpu found\n"); + + return -1; } /** Open the first DRM device we can find, searching up to 16 device nodes */ @@ -756,10 +757,17 @@ static void exit_subtest(const char *result) longjmp(igt_subtest_jmpbuf, 1); } -void igt_skip(void) +void igt_skip(const char *f, ...) { + va_list args; skipped_one = true; + if (!igt_only_list_subtests()) { + va_start(args, f); + vprintf(f, args); + va_end(args); + } + if (in_subtest) { exit_subtest("SKIP"); } else if (test_with_subtests) { @@ -774,12 +782,9 @@ void igt_skip(void) void __igt_skip_check(const char *file, const int line, const char *func, const char *check) { - if (!igt_only_list_subtests()) { - printf("Test requirement not met in function %s, file %s:%i:\n" - "Test requirement: (%s)\n", - func, file, line, check); - } - igt_skip(); + igt_skip("Test requirement not met in function %s, file %s:%i:\n" + "Test requirement: (%s)\n", + func, file, line, check); } void igt_success(void) diff --git a/lib/drmtest.h b/lib/drmtest.h index 3ba3f4f8..c4e39f04 100644 --- a/lib/drmtest.h +++ b/lib/drmtest.h @@ -132,7 +132,7 @@ const char *igt_subtest_name(void); * * For normal tests without subtest it will directly exit. */ -void igt_skip(void); +__attribute__((format(printf, 1, 2))) void igt_skip(const char *f, ...); void __igt_skip_check(const char *file, const int line, const char *func, const char *check); /** diff --git a/tests/gem_ctx_create.c b/tests/gem_ctx_create.c index f451910f..f22522b8 100644 --- a/tests/gem_ctx_create.c +++ b/tests/gem_ctx_create.c @@ -51,9 +51,8 @@ int main(int argc, char *argv[]) ret = drmIoctl(fd, CONTEXT_CREATE_IOCTL, &create); if (ret != 0 && (errno == ENODEV || errno == EINVAL)) { - printf("Kernel is too old, or contexts not supported: %s\n", - strerror(errno)); - igt_skip(); + igt_skip("Kernel is too old, or contexts not supported: %s\n", + strerror(errno)); } else if (ret != 0) { fprintf(stderr, "%s\n", strerror(errno)); igt_fail(1); diff --git a/tests/gem_seqno_wrap.c b/tests/gem_seqno_wrap.c index 0f7e52bb..84170089 100644 --- a/tests/gem_seqno_wrap.c +++ b/tests/gem_seqno_wrap.c @@ -644,7 +644,6 @@ int main(int argc, char **argv) parse_options(argc, argv); card_index = drm_get_card(); - igt_assert(card_index != -1); srandom(time(NULL)); diff --git a/tests/kms_flip.c b/tests/kms_flip.c index fe85dcb0..cb9ccd1b 100644 --- a/tests/kms_flip.c +++ b/tests/kms_flip.c @@ -628,8 +628,6 @@ static void hang_gpu(struct test_output *o) int fd; ssize_t r; - igt_assert(card_index != -1); - snprintf(fname, FILENAME_MAX, "%s/%i/%s", dfs_base, card_index, dfs_entry);