From 2e1c11546a4aa69c1e774aaa653bb9d84552e133 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 30 May 2013 08:37:48 +0100 Subject: [PATCH] gem_reg_read: Only check errno after a definite error As upon success, errno is invalid and may give spurious false results. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=65157 Signed-off-by: Chris Wilson --- tests/gem_reg_read.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/tests/gem_reg_read.c b/tests/gem_reg_read.c index 692dd98..743beac 100644 --- a/tests/gem_reg_read.c +++ b/tests/gem_reg_read.c @@ -37,11 +37,11 @@ struct local_drm_i915_reg_read { #define REG_READ_IOCTL DRM_IOWR(DRM_COMMAND_BASE + 0x31, struct local_drm_i915_reg_read) -static void handle_bad(int ret, int lerrno, int expected, const char *desc) +static void handle_bad(int ret, int expected, const char *desc) { - if (ret != 0 && lerrno != expected) { + if (ret != 0 && errno != expected) { fprintf(stderr, "%s - errno was %d, but should have been %d\n", - desc, lerrno, expected); + desc, errno, expected); exit(EXIT_FAILURE); } else if (ret == 0) { fprintf(stderr, "%s - Command succeeded, but should have failed\n", @@ -53,11 +53,9 @@ static void handle_bad(int ret, int lerrno, int expected, const char *desc) static uint64_t timer_query(int fd) { struct local_drm_i915_reg_read reg_read; - int ret; reg_read.offset = 0x2358; - ret = drmIoctl(fd, REG_READ_IOCTL, ®_read); - if (ret) { + if (drmIoctl(fd, REG_READ_IOCTL, ®_read)) { perror("positive test case failed: "); exit(EXIT_FAILURE); } @@ -68,31 +66,26 @@ static uint64_t timer_query(int fd) int main(int argc, char *argv[]) { struct local_drm_i915_reg_read reg_read; - int ret, fd; - uint64_t val; + int fd; fd = drm_open_any(); reg_read.offset = 0x2358; - ret = drmIoctl(fd, REG_READ_IOCTL, ®_read); - if (errno == EINVAL) - exit(77); - else if (ret) - exit(EXIT_FAILURE); + if (drmIoctl(fd, REG_READ_IOCTL, ®_read)) + exit(errno == EINVAL ? 77 : EXIT_FAILURE); - val = timer_query(fd); + reg_read.val = timer_query(fd); sleep(1); - if (timer_query(fd) == val) { + if (timer_query(fd) == reg_read.val) { fprintf(stderr, "Timer isn't moving, probably busted\n"); exit(EXIT_FAILURE); } /* bad reg */ reg_read.offset = 0x12345678; - ret = drmIoctl(fd, REG_READ_IOCTL, ®_read); - handle_bad(ret, errno, EINVAL, "bad register"); + handle_bad(drmIoctl(fd, REG_READ_IOCTL, ®_read), + EINVAL, "bad register"); close(fd); - exit(EXIT_SUCCESS); } -- 2.7.4