Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: revert "partial revert "remove ctx->lock" v2"

This reverts commit 94f4c4965e5513ba624488f4b601d6b385635aec.

We found that the bo_list is missing a protection for its list entries.
Since that is fixed now this workaround can be removed again.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Christian König and committed by
Alex Deucher
dd80d9c8 736ec9fa

+6 -18
+6 -15
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
··· 128 128 goto free_chunk; 129 129 } 130 130 131 - mutex_lock(&p->ctx->lock); 132 - 133 131 /* skip guilty context job */ 134 132 if (atomic_read(&p->ctx->guilty) == 1) { 135 133 ret = -ECANCELED; ··· 689 691 dma_fence_put(parser->fence); 690 692 691 693 if (parser->ctx) { 692 - mutex_unlock(&parser->ctx->lock); 693 694 amdgpu_ctx_put(parser->ctx); 694 695 } 695 696 if (parser->bo_list) ··· 1135 1138 { 1136 1139 int i, r; 1137 1140 1138 - /* TODO: Investigate why we still need the context lock */ 1139 - mutex_unlock(&p->ctx->lock); 1140 - 1141 1141 for (i = 0; i < p->nchunks; ++i) { 1142 1142 struct amdgpu_cs_chunk *chunk; 1143 1143 ··· 1145 1151 case AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES: 1146 1152 r = amdgpu_cs_process_fence_dep(p, chunk); 1147 1153 if (r) 1148 - goto out; 1154 + return r; 1149 1155 break; 1150 1156 case AMDGPU_CHUNK_ID_SYNCOBJ_IN: 1151 1157 r = amdgpu_cs_process_syncobj_in_dep(p, chunk); 1152 1158 if (r) 1153 - goto out; 1159 + return r; 1154 1160 break; 1155 1161 case AMDGPU_CHUNK_ID_SYNCOBJ_OUT: 1156 1162 r = amdgpu_cs_process_syncobj_out_dep(p, chunk); 1157 1163 if (r) 1158 - goto out; 1164 + return r; 1159 1165 break; 1160 1166 case AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_WAIT: 1161 1167 r = amdgpu_cs_process_syncobj_timeline_in_dep(p, chunk); 1162 1168 if (r) 1163 - goto out; 1169 + return r; 1164 1170 break; 1165 1171 case AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_SIGNAL: 1166 1172 r = amdgpu_cs_process_syncobj_timeline_out_dep(p, chunk); 1167 1173 if (r) 1168 - goto out; 1174 + return r; 1169 1175 break; 1170 1176 } 1171 1177 } 1172 1178 1173 - out: 1174 - mutex_lock(&p->ctx->lock); 1175 - return r; 1179 + return 0; 1176 1180 } 1177 1181 1178 1182 static void amdgpu_cs_post_dependencies(struct amdgpu_cs_parser *p) ··· 1332 1340 goto out; 1333 1341 1334 1342 r = amdgpu_cs_submit(&parser, cs); 1335 - 1336 1343 out: 1337 1344 amdgpu_cs_parser_fini(&parser, r, reserved_buffers); 1338 1345
-2
drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
··· 315 315 kref_init(&ctx->refcount); 316 316 ctx->mgr = mgr; 317 317 spin_lock_init(&ctx->ring_lock); 318 - mutex_init(&ctx->lock); 319 318 320 319 ctx->reset_counter = atomic_read(&mgr->adev->gpu_reset_counter); 321 320 ctx->reset_counter_query = ctx->reset_counter; ··· 406 407 drm_dev_exit(idx); 407 408 } 408 409 409 - mutex_destroy(&ctx->lock); 410 410 kfree(ctx); 411 411 } 412 412
-1
drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
··· 53 53 bool preamble_presented; 54 54 int32_t init_priority; 55 55 int32_t override_priority; 56 - struct mutex lock; 57 56 atomic_t guilty; 58 57 unsigned long ras_counter_ce; 59 58 unsigned long ras_counter_ue;