Commit cc55c45d authored by Monk Liu's avatar Monk Liu Committed by Alex Deucher

drm/amdgpu: give a fence param to ib_free

thus amdgpu_ib_free() can hook sched fence to SA manager
in later patches.

BTW:
for amdgpu_free_job(), it should only fence_put() the
fence of the last ib once, so fix it as well in this patch.
Signed-off-by: default avatarMonk Liu <Monk.Liu@amd.com>
Reviewed-by: default avatarChunming Zhou <david1.zhou@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 16a8a49b
...@@ -1178,7 +1178,7 @@ struct amdgpu_gfx { ...@@ -1178,7 +1178,7 @@ struct amdgpu_gfx {
int amdgpu_ib_get(struct amdgpu_device *adev, struct amdgpu_vm *vm, int amdgpu_ib_get(struct amdgpu_device *adev, struct amdgpu_vm *vm,
unsigned size, struct amdgpu_ib *ib); unsigned size, struct amdgpu_ib *ib);
void amdgpu_ib_free(struct amdgpu_device *adev, struct amdgpu_ib *ib); void amdgpu_ib_free(struct amdgpu_device *adev, struct amdgpu_ib *ib, struct fence *f);
int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs, int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
struct amdgpu_ib *ib, struct fence *last_vm_update, struct amdgpu_ib *ib, struct fence *last_vm_update,
struct fence **f); struct fence **f);
......
...@@ -85,12 +85,13 @@ int amdgpu_ib_get(struct amdgpu_device *adev, struct amdgpu_vm *vm, ...@@ -85,12 +85,13 @@ int amdgpu_ib_get(struct amdgpu_device *adev, struct amdgpu_vm *vm,
* *
* @adev: amdgpu_device pointer * @adev: amdgpu_device pointer
* @ib: IB object to free * @ib: IB object to free
* @f: the fence SA bo need wait on for the ib alloation
* *
* Free an IB (all asics). * Free an IB (all asics).
*/ */
void amdgpu_ib_free(struct amdgpu_device *adev, struct amdgpu_ib *ib) void amdgpu_ib_free(struct amdgpu_device *adev, struct amdgpu_ib *ib, struct fence *f)
{ {
amdgpu_sa_bo_free(adev, &ib->sa_bo, ib->fence); amdgpu_sa_bo_free(adev, &ib->sa_bo, f);
fence_put(ib->fence); fence_put(ib->fence);
} }
......
...@@ -72,7 +72,8 @@ void amdgpu_job_free(struct amdgpu_job *job) ...@@ -72,7 +72,8 @@ void amdgpu_job_free(struct amdgpu_job *job)
unsigned i; unsigned i;
for (i = 0; i < job->num_ibs; ++i) for (i = 0; i < job->num_ibs; ++i)
amdgpu_ib_free(job->adev, &job->ibs[i]); amdgpu_sa_bo_free(job->adev, &job->ibs[i].sa_bo, job->ibs[job->num_ibs - 1].fence);
fence_put(job->ibs[job->num_ibs - 1].fence);
amdgpu_bo_unref(&job->uf.bo); amdgpu_bo_unref(&job->uf.bo);
amdgpu_sync_free(&job->sync); amdgpu_sync_free(&job->sync);
......
...@@ -669,7 +669,7 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring) ...@@ -669,7 +669,7 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring)
err1: err1:
fence_put(f); fence_put(f);
amdgpu_ib_free(adev, &ib); amdgpu_ib_free(adev, &ib, NULL);
err0: err0:
amdgpu_wb_free(adev, index); amdgpu_wb_free(adev, index);
return r; return r;
......
...@@ -2163,7 +2163,7 @@ static int gfx_v7_0_ring_test_ib(struct amdgpu_ring *ring) ...@@ -2163,7 +2163,7 @@ static int gfx_v7_0_ring_test_ib(struct amdgpu_ring *ring)
err2: err2:
fence_put(f); fence_put(f);
amdgpu_ib_free(adev, &ib); amdgpu_ib_free(adev, &ib, NULL);
err1: err1:
amdgpu_gfx_scratch_free(adev, scratch); amdgpu_gfx_scratch_free(adev, scratch);
return r; return r;
......
...@@ -732,7 +732,7 @@ static int gfx_v8_0_ring_test_ib(struct amdgpu_ring *ring) ...@@ -732,7 +732,7 @@ static int gfx_v8_0_ring_test_ib(struct amdgpu_ring *ring)
} }
err2: err2:
fence_put(f); fence_put(f);
amdgpu_ib_free(adev, &ib); amdgpu_ib_free(adev, &ib, NULL);
err1: err1:
amdgpu_gfx_scratch_free(adev, scratch); amdgpu_gfx_scratch_free(adev, scratch);
return r; return r;
...@@ -1289,7 +1289,7 @@ static int gfx_v8_0_do_edc_gpr_workarounds(struct amdgpu_device *adev) ...@@ -1289,7 +1289,7 @@ static int gfx_v8_0_do_edc_gpr_workarounds(struct amdgpu_device *adev)
fail: fail:
fence_put(f); fence_put(f);
amdgpu_ib_free(adev, &ib); amdgpu_ib_free(adev, &ib, NULL);
return r; return r;
} }
......
...@@ -727,7 +727,7 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring) ...@@ -727,7 +727,7 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring)
err1: err1:
fence_put(f); fence_put(f);
amdgpu_ib_free(adev, &ib); amdgpu_ib_free(adev, &ib, NULL);
err0: err0:
amdgpu_wb_free(adev, index); amdgpu_wb_free(adev, index);
return r; return r;
......
...@@ -878,7 +878,7 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring) ...@@ -878,7 +878,7 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring)
} }
err1: err1:
fence_put(f); fence_put(f);
amdgpu_ib_free(adev, &ib); amdgpu_ib_free(adev, &ib, NULL);
err0: err0:
amdgpu_wb_free(adev, index); amdgpu_wb_free(adev, index);
return r; return r;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment