[Intel-gfx] [PATCH 1/5] drm/i915: Make exclusive awaits on i915_active optional
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Mon Apr 6 11:45:06 UTC 2020
On 06/04/2020 10:12, Chris Wilson wrote:
> Later use will require asynchronous waits on the active timelines, but
> will not utilize an async wait on the exclusive channel. Make the await
> on the exclusive fence explicit in the selection flags.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/i915_active.c | 7 ++++---
> drivers/gpu/drm/i915/i915_active.h | 3 ++-
> drivers/gpu/drm/i915/i915_perf.c | 2 +-
> drivers/gpu/drm/i915/i915_vma.c | 3 ++-
> 4 files changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_active.c b/drivers/gpu/drm/i915/i915_active.c
> index 5df7704369fd..d5e24be759f7 100644
> --- a/drivers/gpu/drm/i915/i915_active.c
> +++ b/drivers/gpu/drm/i915/i915_active.c
> @@ -549,14 +549,15 @@ static int await_active(struct i915_active *ref,
> {
> int err = 0;
>
> - /* We must always wait for the exclusive fence! */
> - if (rcu_access_pointer(ref->excl.fence)) {
> + if (flags & I915_ACTIVE_AWAIT_EXCL &&
> + rcu_access_pointer(ref->excl.fence)) {
> err = __await_active(&ref->excl, fn, arg);
> if (err)
> return err;
> }
>
> - if (flags & I915_ACTIVE_AWAIT_ALL && i915_active_acquire_if_busy(ref)) {
> + if (flags & I915_ACTIVE_AWAIT_ACTIVE &&
> + i915_active_acquire_if_busy(ref)) {
> struct active_node *it, *n;
>
> rbtree_postorder_for_each_entry_safe(it, n, &ref->tree, node) {
> diff --git a/drivers/gpu/drm/i915/i915_active.h b/drivers/gpu/drm/i915/i915_active.h
> index b526d310a585..ffafaa78c494 100644
> --- a/drivers/gpu/drm/i915/i915_active.h
> +++ b/drivers/gpu/drm/i915/i915_active.h
> @@ -193,7 +193,8 @@ int i915_sw_fence_await_active(struct i915_sw_fence *fence,
> int i915_request_await_active(struct i915_request *rq,
> struct i915_active *ref,
> unsigned int flags);
> -#define I915_ACTIVE_AWAIT_ALL BIT(0)
> +#define I915_ACTIVE_AWAIT_EXCL BIT(0)
> +#define I915_ACTIVE_AWAIT_ACTIVE BIT(1)
>
> int i915_active_acquire(struct i915_active *ref);
> bool i915_active_acquire_if_busy(struct i915_active *ref);
> diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
> index 2f78b147bb2d..5cde3e4e7be6 100644
> --- a/drivers/gpu/drm/i915/i915_perf.c
> +++ b/drivers/gpu/drm/i915/i915_perf.c
> @@ -1948,7 +1948,7 @@ emit_oa_config(struct i915_perf_stream *stream,
> if (!IS_ERR_OR_NULL(active)) {
> /* After all individual context modifications */
> err = i915_request_await_active(rq, active,
> - I915_ACTIVE_AWAIT_ALL);
> + I915_ACTIVE_AWAIT_ACTIVE);
> if (err)
> goto err_add_request;
>
> diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
> index 6cc2d9c44015..f0383a68c981 100644
> --- a/drivers/gpu/drm/i915/i915_vma.c
> +++ b/drivers/gpu/drm/i915/i915_vma.c
> @@ -1167,7 +1167,8 @@ int __i915_vma_move_to_active(struct i915_vma *vma, struct i915_request *rq)
> GEM_BUG_ON(!i915_vma_is_pinned(vma));
>
> /* Wait for the vma to be bound before we start! */
> - err = i915_request_await_active(rq, &vma->active, 0);
> + err = i915_request_await_active(rq, &vma->active,
> + I915_ACTIVE_AWAIT_EXCL);
> if (err)
> return err;
>
>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Regards,
Tvrtko
More information about the Intel-gfx
mailing list