|
@@ -130,6 +130,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
|
|
|
|
|
|
unsigned i;
|
|
|
int r = 0;
|
|
|
+ bool need_pipe_sync = false;
|
|
|
|
|
|
if (num_ibs == 0)
|
|
|
return -EINVAL;
|
|
@@ -165,7 +166,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
|
|
|
if (ring->funcs->emit_pipeline_sync && job &&
|
|
|
((tmp = amdgpu_sync_get_fence(&job->sched_sync)) ||
|
|
|
amdgpu_vm_need_pipeline_sync(ring, job))) {
|
|
|
- amdgpu_ring_emit_pipeline_sync(ring);
|
|
|
+ need_pipe_sync = true;
|
|
|
dma_fence_put(tmp);
|
|
|
}
|
|
|
|
|
@@ -173,7 +174,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
|
|
|
ring->funcs->insert_start(ring);
|
|
|
|
|
|
if (job) {
|
|
|
- r = amdgpu_vm_flush(ring, job);
|
|
|
+ r = amdgpu_vm_flush(ring, job, need_pipe_sync);
|
|
|
if (r) {
|
|
|
amdgpu_ring_undo(ring);
|
|
|
return r;
|