Skip to content

Commit

Permalink
drm/i915: Refactor export_fence() after i915_vma_move_to_active()
Browse files Browse the repository at this point in the history
Currently all callers are responsible for adding the vma to the active
timeline and then exporting its fence. Combine the two operations into
i915_vma_move_to_active() to move all the extra handling from the
callers to the single site.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180706103947.15919-1-chris@chris-wilson.co.uk
  • Loading branch information
Chris Wilson committed Jul 6, 2018
1 parent 8fdbfd8 commit da99fe5
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 45 deletions.
47 changes: 21 additions & 26 deletions drivers/gpu/drm/i915/i915_gem_execbuffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -1166,15 +1166,9 @@ static int __reloc_gpu_alloc(struct i915_execbuffer *eb,

GEM_BUG_ON(!reservation_object_test_signaled_rcu(batch->resv, true));
i915_vma_move_to_active(batch, rq, 0);
reservation_object_lock(batch->resv, NULL);
reservation_object_add_excl_fence(batch->resv, &rq->fence);
reservation_object_unlock(batch->resv);
i915_vma_unpin(batch);

i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
reservation_object_lock(vma->resv, NULL);
reservation_object_add_excl_fence(vma->resv, &rq->fence);
reservation_object_unlock(vma->resv);

rq->batch = batch;

Expand Down Expand Up @@ -1771,25 +1765,6 @@ static int eb_relocate(struct i915_execbuffer *eb)
return eb_relocate_slow(eb);
}

static void eb_export_fence(struct i915_vma *vma,
struct i915_request *rq,
unsigned int flags)
{
struct reservation_object *resv = vma->resv;

/*
* Ignore errors from failing to allocate the new fence, we can't
* handle an error right now. Worst case should be missed
* synchronisation leading to rendering corruption.
*/
reservation_object_lock(resv, NULL);
if (flags & EXEC_OBJECT_WRITE)
reservation_object_add_excl_fence(resv, &rq->fence);
else if (reservation_object_reserve_shared(resv) == 0)
reservation_object_add_shared_fence(resv, &rq->fence);
reservation_object_unlock(resv);
}

static int eb_move_to_gpu(struct i915_execbuffer *eb)
{
const unsigned int count = eb->buffer_count;
Expand Down Expand Up @@ -1844,7 +1819,6 @@ static int eb_move_to_gpu(struct i915_execbuffer *eb)
struct i915_vma *vma = eb->vma[i];

i915_vma_move_to_active(vma, eb->request, flags);
eb_export_fence(vma, eb->request, flags);

__eb_unreserve_vma(vma, flags);
vma->exec_flags = NULL;
Expand Down Expand Up @@ -1884,6 +1858,25 @@ static bool i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec)
return true;
}

static void export_fence(struct i915_vma *vma,
struct i915_request *rq,
unsigned int flags)
{
struct reservation_object *resv = vma->resv;

/*
* Ignore errors from failing to allocate the new fence, we can't
* handle an error right now. Worst case should be missed
* synchronisation leading to rendering corruption.
*/
reservation_object_lock(resv, NULL);
if (flags & EXEC_OBJECT_WRITE)
reservation_object_add_excl_fence(resv, &rq->fence);
else if (reservation_object_reserve_shared(resv) == 0)
reservation_object_add_shared_fence(resv, &rq->fence);
reservation_object_unlock(resv);
}

void i915_vma_move_to_active(struct i915_vma *vma,
struct i915_request *rq,
unsigned int flags)
Expand Down Expand Up @@ -1921,6 +1914,8 @@ void i915_vma_move_to_active(struct i915_vma *vma,

if (flags & EXEC_OBJECT_NEEDS_FENCE)
i915_gem_active_set(&vma->last_fence, rq);

export_fence(vma, rq, flags);
}

static int i915_reset_gen7_sol_offsets(struct i915_request *rq)
Expand Down
4 changes: 0 additions & 4 deletions drivers/gpu/drm/i915/selftests/huge_pages.c
Original file line number Diff line number Diff line change
Expand Up @@ -998,10 +998,6 @@ static int gpu_write(struct i915_vma *vma,

i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);

reservation_object_lock(vma->resv, NULL);
reservation_object_add_excl_fence(vma->resv, &rq->fence);
reservation_object_unlock(vma->resv);

err_request:
i915_request_add(rq);

Expand Down
4 changes: 0 additions & 4 deletions drivers/gpu/drm/i915/selftests/i915_gem_coherency.c
Original file line number Diff line number Diff line change
Expand Up @@ -225,10 +225,6 @@ static int gpu_set(struct drm_i915_gem_object *obj,
i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
i915_vma_unpin(vma);

reservation_object_lock(obj->resv, NULL);
reservation_object_add_excl_fence(obj->resv, &rq->fence);
reservation_object_unlock(obj->resv);

i915_request_add(rq);

return 0;
Expand Down
4 changes: 0 additions & 4 deletions drivers/gpu/drm/i915/selftests/i915_gem_context.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,10 +178,6 @@ static int gpu_fill(struct drm_i915_gem_object *obj,
i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
i915_vma_unpin(vma);

reservation_object_lock(obj->resv, NULL);
reservation_object_add_excl_fence(obj->resv, &rq->fence);
reservation_object_unlock(obj->resv);

i915_request_add(rq);

return 0;
Expand Down
4 changes: 0 additions & 4 deletions drivers/gpu/drm/i915/selftests/i915_gem_object.c
Original file line number Diff line number Diff line change
Expand Up @@ -466,10 +466,6 @@ static int make_obj_busy(struct drm_i915_gem_object *obj)

i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);

reservation_object_lock(vma->resv, NULL);
reservation_object_add_excl_fence(vma->resv, &rq->fence);
reservation_object_unlock(vma->resv);

i915_request_add(rq);

i915_gem_object_set_active_reference(obj);
Expand Down
3 changes: 0 additions & 3 deletions drivers/gpu/drm/i915/selftests/intel_workarounds.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,6 @@ read_nonprivs(struct i915_gem_context *ctx, struct intel_engine_cs *engine)
intel_ring_advance(rq, cs);

i915_vma_move_to_active(vma, rq, EXEC_OBJECT_WRITE);
reservation_object_lock(vma->resv, NULL);
reservation_object_add_excl_fence(vma->resv, &rq->fence);
reservation_object_unlock(vma->resv);

i915_gem_object_get(result);
i915_gem_object_set_active_reference(result);
Expand Down

0 comments on commit da99fe5

Please sign in to comment.