Skip to content

Commit

Permalink
drm/xe/bo: consider dma-resv fences for clear job
Browse files Browse the repository at this point in the history
There could be active fences already in the dma-resv for the object
prior to clearing. Make sure to input them as dependencies for the clear
job.

v2 (Matt B):
  - We can use USAGE_KERNEL here, since it's only the move fences we
    care about here. Also add a comment.

Signed-off-by: Matthew Auld <[email protected]>
Cc: Thomas Hellström <[email protected]>
Cc: Matthew Brost <[email protected]>
Reviewed-by: Thomas Hellström <[email protected]>
Signed-off-by: Rodrigo Vivi <[email protected]>
  • Loading branch information
matt-auld authored and rodrigovivi committed Dec 21, 2023
1 parent 4202dd9 commit a667cf5
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions drivers/gpu/drm/xe/xe_migrate.c
Original file line number Diff line number Diff line change
Expand Up @@ -980,8 +980,6 @@ struct dma_fence *xe_migrate_clear(struct xe_migrate *m,

size -= clear_L0;

/* TODO: Add dependencies here */

/* Preemption is enabled again by the ring ops. */
if (!clear_vram) {
emit_pte(m, bb, clear_L0_pt, clear_vram, &src_it, clear_L0,
Expand Down Expand Up @@ -1010,6 +1008,18 @@ struct dma_fence *xe_migrate_clear(struct xe_migrate *m,
}

xe_sched_job_add_migrate_flush(job, flush_flags);
if (!fence) {
/*
* There can't be anything userspace related at this
* point, so we just need to respect any potential move
* fences, which are always tracked as
* DMA_RESV_USAGE_KERNEL.
*/
err = job_add_deps(job, bo->ttm.base.resv,
DMA_RESV_USAGE_KERNEL);
if (err)
goto err_job;
}

xe_sched_job_arm(job);
dma_fence_put(fence);
Expand All @@ -1024,6 +1034,8 @@ struct dma_fence *xe_migrate_clear(struct xe_migrate *m,
xe_bb_free(bb, fence);
continue;

err_job:
xe_sched_job_put(job);
err:
mutex_unlock(&m->job_mutex);
xe_bb_free(bb, NULL);
Expand Down

0 comments on commit a667cf5

Please sign in to comment.