[Intel-gfx] [PATCH i-g-t] syncobj: Add some wait and reset tests
Daniel Stone
daniel at fooishbar.org
Wed Aug 9 17:32:30 UTC 2017
Hi Jason,
On 9 August 2017 at 18:04, Jason Ekstrand <jason at jlekstrand.net> wrote:
> +/* One one tenth of a second */
> +#define SHORT_TIME_NSEC 100000000ull
Er, a hundredth? Or only one, one tenth?
> +static void
> +test_wait_illegal_handle(int fd)
> +{
> + struct drm_syncobj_wait wait = { 0 };
> + uint32_t handle = 2;
Use 0.
> +static void
> +test_wait_for_submit_unsignaled(int fd)
> +{
> + uint32_t syncobj = syncobj_create(fd);
> + struct drm_syncobj_wait wait = { 0 };
> + int ret;
> +
> + wait.handles = to_user_pointer(&syncobj);
> + wait.count_handles = 1;
> + wait.flags = DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT;
> + wait.timeout_nsec = short_timeout();
> +
> + ret = ioctl(fd, DRM_IOCTL_SYNCOBJ_WAIT, &wait);
> + igt_assert(ret == -1 && errno == ETIME);
There's do_ioctl_err() for this pattern BTW, and I think that takes
care of EINTR as well.
> +static void
> +test_wait_signaled(int fd)
> +{
> + uint32_t syncobj = syncobj_create(fd);
> + struct drm_syncobj_wait wait = { 0 };
> + int ret;
> +
> + wait.handles = to_user_pointer(&syncobj);
> + wait.count_handles = 1;
> +
> + trigger_syncobj(fd, &syncobj, 1, false);
> +
> + wait.timeout_nsec = 0;
> + ret = ioctl(fd, DRM_IOCTL_SYNCOBJ_WAIT, &wait);
> + igt_warn_on(ret != -1 || errno != ETIME);
> +
> + wait.timeout_nsec = short_timeout();
> + ret = ioctl(fd, DRM_IOCTL_SYNCOBJ_WAIT, &wait);
> + igt_assert(ret == 0);
... and do_ioctl() for this pattern.
> +static bool
> +has_syncobj_wait(int fd)
> +{
> + struct drm_syncobj_wait wait = { 0 };
This probably needs a local_ definition.
> + uint64_t value;
> + int ret;
> +
> + if (drmGetCap(fd, DRM_CAP_SYNCOBJ, &value))
> + return false;
> + if (!value)
> + return false;
> +
> + /* Try waiting for zero sync objects should fail with EINVAL */
> + ret = ioctl(fd, DRM_IOCTL_SYNCOBJ_WAIT, &wait);
> + return ret == -1 && errno == EINVAL;
Unfortunately an unrecognised ioctl also leads to a failure with
EINVAL. Try another test for ioctl presence, e.g. do you get ENOENT if
you pass one handle to wait for, but that handle is 0 (invalid GEM
object ID)?
I couldn't see much else obvious, and it seems like a decent enough
workout of the wait API, so, with these and what Chris suggested:
Acked-by: Daniel Stone <daniels at collabora.com>
Cheers,
Daniel
More information about the Intel-gfx
mailing list