Skip to content

Commit 94f4c49

Browse files
drm/amdgpu: partial revert "remove ctx->lock" v2
This reverts commit 461fa7b. We are missing some inter dependencies here so re-introduce the lock until we have figured out what's missing. Just drop/retake it while adding dependencies. v2: still drop the lock while adding dependencies Signed-off-by: Christian König <christian.koenig@amd.com> Tested-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com> (v1) Fixes: 461fa7b ("drm/amdgpu: remove ctx->lock") Acked-by: Alex Deucher <alexander.deucher@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220419110633.166236-1-christian.koenig@amd.com
1 parent b089c0a commit 94f4c49

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, union drm_amdgpu_cs
128128
goto free_chunk;
129129
}
130130

131+
mutex_lock(&p->ctx->lock);
132+
131133
/* skip guilty context job */
132134
if (atomic_read(&p->ctx->guilty) == 1) {
133135
ret = -ECANCELED;
@@ -709,6 +711,7 @@ static void amdgpu_cs_parser_fini(struct amdgpu_cs_parser *parser, int error,
709711
dma_fence_put(parser->fence);
710712

711713
if (parser->ctx) {
714+
mutex_unlock(&parser->ctx->lock);
712715
amdgpu_ctx_put(parser->ctx);
713716
}
714717
if (parser->bo_list)
@@ -1157,6 +1160,9 @@ static int amdgpu_cs_dependencies(struct amdgpu_device *adev,
11571160
{
11581161
int i, r;
11591162

1163+
/* TODO: Investigate why we still need the context lock */
1164+
mutex_unlock(&p->ctx->lock);
1165+
11601166
for (i = 0; i < p->nchunks; ++i) {
11611167
struct amdgpu_cs_chunk *chunk;
11621168

@@ -1167,32 +1173,34 @@ static int amdgpu_cs_dependencies(struct amdgpu_device *adev,
11671173
case AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES:
11681174
r = amdgpu_cs_process_fence_dep(p, chunk);
11691175
if (r)
1170-
return r;
1176+
goto out;
11711177
break;
11721178
case AMDGPU_CHUNK_ID_SYNCOBJ_IN:
11731179
r = amdgpu_cs_process_syncobj_in_dep(p, chunk);
11741180
if (r)
1175-
return r;
1181+
goto out;
11761182
break;
11771183
case AMDGPU_CHUNK_ID_SYNCOBJ_OUT:
11781184
r = amdgpu_cs_process_syncobj_out_dep(p, chunk);
11791185
if (r)
1180-
return r;
1186+
goto out;
11811187
break;
11821188
case AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_WAIT:
11831189
r = amdgpu_cs_process_syncobj_timeline_in_dep(p, chunk);
11841190
if (r)
1185-
return r;
1191+
goto out;
11861192
break;
11871193
case AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_SIGNAL:
11881194
r = amdgpu_cs_process_syncobj_timeline_out_dep(p, chunk);
11891195
if (r)
1190-
return r;
1196+
goto out;
11911197
break;
11921198
}
11931199
}
11941200

1195-
return 0;
1201+
out:
1202+
mutex_lock(&p->ctx->lock);
1203+
return r;
11961204
}
11971205

11981206
static void amdgpu_cs_post_dependencies(struct amdgpu_cs_parser *p)
@@ -1368,6 +1376,7 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
13681376
goto out;
13691377

13701378
r = amdgpu_cs_submit(&parser, cs);
1379+
13711380
out:
13721381
amdgpu_cs_parser_fini(&parser, r, reserved_buffers);
13731382

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ static int amdgpu_ctx_init(struct amdgpu_device *adev,
237237

238238
kref_init(&ctx->refcount);
239239
spin_lock_init(&ctx->ring_lock);
240+
mutex_init(&ctx->lock);
240241

241242
ctx->reset_counter = atomic_read(&adev->gpu_reset_counter);
242243
ctx->reset_counter_query = ctx->reset_counter;
@@ -357,6 +358,7 @@ static void amdgpu_ctx_fini(struct kref *ref)
357358
drm_dev_exit(idx);
358359
}
359360

361+
mutex_destroy(&ctx->lock);
360362
kfree(ctx);
361363
}
362364

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ struct amdgpu_ctx {
4949
bool preamble_presented;
5050
int32_t init_priority;
5151
int32_t override_priority;
52+
struct mutex lock;
5253
atomic_t guilty;
5354
unsigned long ras_counter_ce;
5455
unsigned long ras_counter_ue;

0 commit comments

Comments
 (0)