Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -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);
+3 −2
Original line number Original line Diff line number Diff line
@@ -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);
}
}


+2 −1
Original line number Original line Diff line number Diff line
@@ -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);
+1 −1
Original line number Original line Diff line number Diff line
@@ -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;
+1 −1
Original line number Original line Diff line number Diff line
@@ -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;
Loading