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

drm/amdgpu: Add AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES

New chunk for dependency on start of job's execution instead on
the end. This is used for GPU deadlock prevention when
userspace uses mid-IB fences to wait for mid-IB work on other rings.

v2: Fix typo in AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES
v3: Bump KMS version
v4: put old fence AFTER acquiring the scheduled fence.

Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Suggested-by: Christian Koenig <Christian.Koenig@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Andrey Grodzovsky and committed by
Alex Deucher
67dd1a36 373e87fc

+15 -2
+12 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
··· 214 214 case AMDGPU_CHUNK_ID_DEPENDENCIES: 215 215 case AMDGPU_CHUNK_ID_SYNCOBJ_IN: 216 216 case AMDGPU_CHUNK_ID_SYNCOBJ_OUT: 217 + case AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES: 217 218 break; 218 219 219 220 default: ··· 1091 1090 1092 1091 fence = amdgpu_ctx_get_fence(ctx, entity, 1093 1092 deps[i].handle); 1093 + 1094 + if (chunk->chunk_id == AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES) { 1095 + struct drm_sched_fence *s_fence = to_drm_sched_fence(fence); 1096 + struct dma_fence *old = fence; 1097 + 1098 + fence = dma_fence_get(&s_fence->scheduled); 1099 + dma_fence_put(old); 1100 + } 1101 + 1094 1102 if (IS_ERR(fence)) { 1095 1103 r = PTR_ERR(fence); 1096 1104 amdgpu_ctx_put(ctx); ··· 1187 1177 1188 1178 chunk = &p->chunks[i]; 1189 1179 1190 - if (chunk->chunk_id == AMDGPU_CHUNK_ID_DEPENDENCIES) { 1180 + if (chunk->chunk_id == AMDGPU_CHUNK_ID_DEPENDENCIES || 1181 + chunk->chunk_id == AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES) { 1191 1182 r = amdgpu_cs_process_fence_dep(p, chunk); 1192 1183 if (r) 1193 1184 return r;
+2 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
··· 71 71 * - 3.25.0 - Add support for sensor query info (stable pstate sclk/mclk). 72 72 * - 3.26.0 - GFX9: Process AMDGPU_IB_FLAG_TC_WB_NOT_INVALIDATE. 73 73 * - 3.27.0 - Add new chunk to to AMDGPU_CS to enable BO_LIST creation. 74 + * - 3.28.0 - Add AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES 74 75 */ 75 76 #define KMS_DRIVER_MAJOR 3 76 - #define KMS_DRIVER_MINOR 27 77 + #define KMS_DRIVER_MINOR 28 77 78 #define KMS_DRIVER_PATCHLEVEL 0 78 79 79 80 int amdgpu_vram_limit = 0;
+1
include/uapi/drm/amdgpu_drm.h
··· 523 523 #define AMDGPU_CHUNK_ID_SYNCOBJ_IN 0x04 524 524 #define AMDGPU_CHUNK_ID_SYNCOBJ_OUT 0x05 525 525 #define AMDGPU_CHUNK_ID_BO_HANDLES 0x06 526 + #define AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES 0x07 526 527 527 528 struct drm_amdgpu_cs_chunk { 528 529 __u32 chunk_id;