Skip to content

Commit d0c35c8

Browse files
committed
drm/amdgpu: remove job parameter from amdgpu_fence_emit()
What we actually care about is the amdgpu_fence object so pass that in explicitly to avoid possible mistakes in the future. The job_run_counter handling can be safely removed at this point as we no longer support job resubmission. Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 1e9d17a commit d0c35c8

3 files changed

Lines changed: 19 additions & 24 deletions

File tree

drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,14 @@ static u32 amdgpu_fence_read(struct amdgpu_ring *ring)
9999
*
100100
* @ring: ring the fence is associated with
101101
* @f: resulting fence object
102-
* @job: job the fence is embedded in
102+
* @af: amdgpu fence input
103103
* @flags: flags to pass into the subordinate .emit_fence() call
104104
*
105105
* Emits a fence command on the requested ring (all asics).
106106
* Returns 0 on success, -ENOMEM on failure.
107107
*/
108-
int amdgpu_fence_emit(struct amdgpu_ring *ring, struct dma_fence **f, struct amdgpu_job *job,
109-
unsigned int flags)
108+
int amdgpu_fence_emit(struct amdgpu_ring *ring, struct dma_fence **f,
109+
struct amdgpu_fence *af, unsigned int flags)
110110
{
111111
struct amdgpu_device *adev = ring->adev;
112112
struct dma_fence *fence;
@@ -115,36 +115,28 @@ int amdgpu_fence_emit(struct amdgpu_ring *ring, struct dma_fence **f, struct amd
115115
uint32_t seq;
116116
int r;
117117

118-
if (job == NULL) {
118+
if (!af) {
119119
/* create a separate hw fence */
120120
am_fence = kzalloc(sizeof(*am_fence), GFP_KERNEL);
121121
if (!am_fence)
122122
return -ENOMEM;
123123
} else {
124-
/* take use of job-embedded fence */
125-
am_fence = &job->hw_fence;
124+
am_fence = af;
126125
}
127126
fence = &am_fence->base;
128127
am_fence->ring = ring;
129128

130129
seq = ++ring->fence_drv.sync_seq;
131-
if (job && job->job_run_counter) {
132-
/* reinit seq for resubmitted jobs */
133-
fence->seqno = seq;
134-
/* TO be inline with external fence creation and other drivers */
130+
if (af) {
131+
dma_fence_init(fence, &amdgpu_job_fence_ops,
132+
&ring->fence_drv.lock,
133+
adev->fence_context + ring->idx, seq);
134+
/* Against remove in amdgpu_job_{free, free_cb} */
135135
dma_fence_get(fence);
136136
} else {
137-
if (job) {
138-
dma_fence_init(fence, &amdgpu_job_fence_ops,
139-
&ring->fence_drv.lock,
140-
adev->fence_context + ring->idx, seq);
141-
/* Against remove in amdgpu_job_{free, free_cb} */
142-
dma_fence_get(fence);
143-
} else {
144-
dma_fence_init(fence, &amdgpu_fence_ops,
145-
&ring->fence_drv.lock,
146-
adev->fence_context + ring->idx, seq);
147-
}
137+
dma_fence_init(fence, &amdgpu_fence_ops,
138+
&ring->fence_drv.lock,
139+
adev->fence_context + ring->idx, seq);
148140
}
149141

150142
amdgpu_ring_emit_fence(ring, ring->fence_drv.gpu_addr,

drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned int num_ibs,
128128
struct amdgpu_device *adev = ring->adev;
129129
struct amdgpu_ib *ib = &ibs[0];
130130
struct dma_fence *tmp = NULL;
131+
struct amdgpu_fence *af;
131132
bool need_ctx_switch;
132133
struct amdgpu_vm *vm;
133134
uint64_t fence_ctx;
@@ -154,13 +155,15 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned int num_ibs,
154155
csa_va = job->csa_va;
155156
gds_va = job->gds_va;
156157
init_shadow = job->init_shadow;
158+
af = &job->hw_fence;
157159
} else {
158160
vm = NULL;
159161
fence_ctx = 0;
160162
shadow_va = 0;
161163
csa_va = 0;
162164
gds_va = 0;
163165
init_shadow = false;
166+
af = NULL;
164167
}
165168

166169
if (!ring->sched.ready) {
@@ -282,7 +285,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned int num_ibs,
282285
amdgpu_ring_init_cond_exec(ring, ring->cond_exe_gpu_addr);
283286
}
284287

285-
r = amdgpu_fence_emit(ring, f, job, fence_flags);
288+
r = amdgpu_fence_emit(ring, f, af, fence_flags);
286289
if (r) {
287290
dev_err(adev->dev, "failed to emit fence (%d)\n", r);
288291
if (job && job->vmid)

drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@ void amdgpu_fence_driver_hw_init(struct amdgpu_device *adev);
157157
void amdgpu_fence_driver_hw_fini(struct amdgpu_device *adev);
158158
int amdgpu_fence_driver_sw_init(struct amdgpu_device *adev);
159159
void amdgpu_fence_driver_sw_fini(struct amdgpu_device *adev);
160-
int amdgpu_fence_emit(struct amdgpu_ring *ring, struct dma_fence **fence, struct amdgpu_job *job,
161-
unsigned flags);
160+
int amdgpu_fence_emit(struct amdgpu_ring *ring, struct dma_fence **f,
161+
struct amdgpu_fence *af, unsigned int flags);
162162
int amdgpu_fence_emit_polling(struct amdgpu_ring *ring, uint32_t *s,
163163
uint32_t timeout);
164164
bool amdgpu_fence_process(struct amdgpu_ring *ring);

0 commit comments

Comments
 (0)