History

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.

Andrey Grodzovsky committed 7 years ago

Commit 67dd1a31 parent 373e87f3 files · +15 −2Browse files

Unified · Split

3 files
  1. drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +12 −1
  2. drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +2 −1
  3. include/uapi/drm/amdgpu_drm.h +1 −0
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c+12−1
@@ -214,6 +214,7 @@ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, union drm_amdgpu_cs · 213 unmodified lines
214214 case AMDGPU_CHUNK_ID_DEPENDENCIES:
215215 case AMDGPU_CHUNK_ID_SYNCOBJ_IN:
216216 case AMDGPU_CHUNK_ID_SYNCOBJ_OUT:
217+ case AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES:
217218 break;
218219
219220 default:
@@ -1090,6 +1091,15 @@ static int amdgpu_cs_process_fence_dep(struct amdgpu_cs_parser *p, · 870 unmodified lines
10901091
10911092 fence = amdgpu_ctx_get_fence(ctx, entity,
10921093 deps[i].handle);
1094+
1095+ if (chunk->chunk_id == AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES) {
1096+ struct drm_sched_fence *s_fence = to_drm_sched_fence(fence);
1097+ struct dma_fence *old = fence;
1098+
1099+ fence = dma_fence_get(&s_fence->scheduled);
1100+ dma_fence_put(old);
1101+ }
1102+
10931103 if (IS_ERR(fence)) {
10941104 r = PTR_ERR(fence);
10951105 amdgpu_ctx_put(ctx);
@@ -1177,7 +1187,8 @@ static int amdgpu_cs_dependencies(struct amdgpu_device *adev, · 81 unmodified lines
11771187
11781188 chunk = &p->chunks[i];
11791189
1180− if (chunk->chunk_id == AMDGPU_CHUNK_ID_DEPENDENCIES) {
1190+ if (chunk->chunk_id == AMDGPU_CHUNK_ID_DEPENDENCIES ||
1191+ chunk->chunk_id == AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES) {
11811192 r = amdgpu_cs_process_fence_dep(p, chunk);
11821193 if (r)
11831194 return r;
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c+2−1
@@ -71,9 +71,10 @@ · 70 unmodified lines
7171 * - 3.25.0 - Add support for sensor query info (stable pstate sclk/mclk).
7272 * - 3.26.0 - GFX9: Process AMDGPU_IB_FLAG_TC_WB_NOT_INVALIDATE.
7373 * - 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
7475 */
7576 #define KMS_DRIVER_MAJOR 3
76−#define KMS_DRIVER_MINOR 27
77+#define KMS_DRIVER_MINOR 28
7778 #define KMS_DRIVER_PATCHLEVEL 0
7879
7980 int amdgpu_vram_limit = 0;
include/uapi/drm/amdgpu_drm.h+1−0
@@ -523,6 +523,7 @@ struct drm_amdgpu_gem_va { · 522 unmodified lines
523523 #define AMDGPU_CHUNK_ID_SYNCOBJ_IN 0x04
524524 #define AMDGPU_CHUNK_ID_SYNCOBJ_OUT 0x05
525525 #define AMDGPU_CHUNK_ID_BO_HANDLES 0x06
526+#define AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES 0x07
526527
527528 struct drm_amdgpu_cs_chunk {
528529 __u32 chunk_id;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t