On Thu, Jul 16, 2015 at 12:37:55PM +0200, Michał Winiarski wrote: > When reading the timestamp register with single 64b read, we are observing > invalid values on x86_64: > > [f = valid counter value | X = garbage] > > i386: 0x0000000fffffffff > x86_64: 0xffffffffXXXXXXXX > > Test checks if the counter is moving and increasing. > Add a check to see if we can use (reg | 1) flag to get a proper 36b timestamp, > shifting the value on x86_64 if we can't. > > v2: More iterations of monotonic test, comments, minor fixups (Chris) > > Cc: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Signed-off-by: Michał Winiarski <michal.winiarski@xxxxxxxxx> Down to being really pinicky now, > +static int read_register(int fd, uint64_t offset, uint64_t * val) > { > + int ret; > struct local_drm_i915_reg_read reg_read; > + reg_read.offset = offset; > > - reg_read.offset = 0x2358; > - igt_fail_on_f(drmIoctl(fd, REG_READ_IOCTL, ®_read), > - "positive test case failed: "); > + ret = drmIoctl(fd, REG_READ_IOCTL, ®_read); A nice trick to use here is ret = 0; if (drmIoctl()) ret = -errno; Then later bad-reg becomes igt_assert_eq(read_register(BAD), -EINVAL); > +static uint64_t timer_query(int fd, uint64_t * val) Return is just int > + igt_subtest("bad-register") > + igt_assert(read_register(fd, 0x12345678, &val) == -1 && > + errno == EINVAL); > + > + igt_subtest("timestamp-moving") > + test_timestamp_moving(fd); > > - igt_assert(ret != 0 && errno == EINVAL); > + igt_subtest("timestamp-monotonic") > + test_timestamp_monotonic(fd); Both of these subtests should start with igt_skip(timer_query() != 0) so that we correctly disable the test for all kernels/machines that don't support the register read. (Rather than reporting the tests as fail.) -Chris -- Chris Wilson, Intel Open Source Technology Centre _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx