Currently, we allow read-read CPU/GPU concurrency via set-domain-ioctl, but we don't have a similar facility for a plain wait-ioctl. If we add a new flag that userspace can use to opt-in for only waiting for GPU writes, userspace can use it to co-ordinate its own read-read concurrency (without the side-effect of touching cache domains on the GEM object). To test whether this flag is available, userspace needs to do a query operation like: bool test_wait_has_read_only(int fd) { struct drm_i915_gem_wait arg = { .flags = I915_WAIT_READ_ONLY }; int err = 0; if (ioctl(fd, DRM_IOCTL_I915_GEM_WAIT, &arg)) err = -errno; return err == -ENOENT; } Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> --- drivers/gpu/drm/i915/i915_gem.c | 5 +++-- include/uapi/drm/i915_drm.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index c2a660c7538b..d50710752265 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -3006,7 +3006,7 @@ i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file) ktime_t start; long ret; - if (args->flags != 0) + if (args->flags & ~(I915_WAIT_READ_ONLY)) return -EINVAL; obj = i915_gem_object_lookup(file, args->bo_handle); @@ -3016,7 +3016,8 @@ i915_gem_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file) start = ktime_get(); ret = i915_gem_object_wait(obj, - I915_WAIT_INTERRUPTIBLE | I915_WAIT_ALL, + I915_WAIT_INTERRUPTIBLE | + (args->flags & I915_WAIT_READ_ONLY ? 0 : I915_WAIT_ALL), to_wait_timeout(args->timeout_ns), to_rps_client(file)); diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h index 72460826f818..6387a7485702 100644 --- a/include/uapi/drm/i915_drm.h +++ b/include/uapi/drm/i915_drm.h @@ -1312,6 +1312,7 @@ struct drm_i915_gem_wait { /** Handle of BO we shall wait on */ __u32 bo_handle; __u32 flags; +#define I915_WAIT_READ_ONLY 0x1 /** Number of nanoseconds to wait, Returns time remaining. */ __s64 timeout_ns; }; -- 2.11.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx