Replace amdgpu_bo_kmap()/amdgpu_bo_kunmap() in the trap handler code with ttm_bo_vmap()/ttm_bo_vunmap().
Store the mapping as struct iosys_map and use iosys_map helpers for memory access. This aligns the trap code with the modern DRM/TTM mapping interfaces. Using iosys_map allows the code to use common DRM mapping helpers instead of directly accessing memory through raw CPU pointers. Suggested-by: Christian König <[email protected]> Signed-off-by: Srinivasan Shanmugam <[email protected]> --- drivers/gpu/drm/amd/amdgpu/amdgpu_trap.c | 31 +++++++++++------------- drivers/gpu/drm/amd/amdgpu/amdgpu_trap.h | 2 +- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trap.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_trap.c index 29eba2968350..eb842fe8aed1 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trap.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trap.c @@ -427,29 +427,29 @@ int amdgpu_trap_alloc(struct amdgpu_device *adev, struct amdgpu_vm *vm, if (r) goto err_exec; - /* VM resv already held — kmap directly, no separate reserve needed */ - r = amdgpu_bo_kmap(cwsr->tma_bo, &cwsr->tma_cpu_addr); + /* VM resv already held, vmap directly without a separate reserve */ + r = ttm_bo_vmap(&cwsr->tma_bo->tbo, &cwsr->tma_map); if (r) goto err_tma; - memset(cwsr->tma_cpu_addr, 0, AMDGPU_TRAP_TMA_MAX_SIZE); + iosys_map_memset(&cwsr->tma_map, 0, 0, AMDGPU_TRAP_TMA_MAX_SIZE); r = amdgpu_trap_map_region(adev, vm, cwsr, AMDGPU_TRAP_TMA); if (r) - goto err_kmap; + goto err_vmap; r = amdgpu_trap_map_region(adev, vm, cwsr, AMDGPU_TRAP_TBA); if (r) { amdgpu_trap_unmap_region(adev, cwsr, AMDGPU_TRAP_TMA); - goto err_kmap; + goto err_vmap; } drm_exec_fini(&exec); *trap_obj = cwsr; return 0; -err_kmap: - amdgpu_bo_kunmap(cwsr->tma_bo); +err_vmap: + ttm_bo_vunmap(&cwsr->tma_bo->tbo, &cwsr->tma_map); err_tma: amdgpu_bo_unref(&cwsr->tma_bo); err_exec: @@ -524,7 +524,7 @@ void amdgpu_trap_free(struct amdgpu_device *adev, struct amdgpu_vm *vm, err: drm_exec_fini(&exec); /* TMA BO not pinned — release CPU mapping and free */ - amdgpu_bo_kunmap((*trap_obj)->tma_bo); + ttm_bo_vunmap(&(*trap_obj)->tma_bo->tbo, &(*trap_obj)->tma_map); amdgpu_bo_unref(&(*trap_obj)->tma_bo); kfree(*trap_obj); *trap_obj = NULL; @@ -569,24 +569,24 @@ static int amdgpu_trap_set_l2_trap_handler(struct amdgpu_device *adev, struct am struct amdgpu_trap_usr_addr *tma, struct amdgpu_trap_usr_addr *tba) { - uint64_t *l1tma; int r; if (!amdgpu_trap_is_enabled(adev)) return -EOPNOTSUPP; - if (!cwsr_obj || !cwsr_obj->tma_cpu_addr || !tma || !tba) + if (!cwsr_obj || iosys_map_is_null(&cwsr_obj->tma_map) || !tma || !tba) return -EINVAL; + r = amdgpu_trap_validate_user_addr(adev, vm, tma); if (r) return r; + r = amdgpu_trap_validate_user_addr(adev, vm, tba); if (r) return r; - l1tma = (uint64_t *)(cwsr_obj->tma_cpu_addr); - l1tma[0] = tma->addr; - l1tma[1] = tba->addr; + iosys_map_wr(&cwsr_obj->tma_map, 0, u64, tma->addr); + iosys_map_wr(&cwsr_obj->tma_map, sizeof(u64), u64, tba->addr); return 0; } @@ -638,16 +638,13 @@ int amdgpu_trap_set_trap_debug_flag(struct amdgpu_device *adev, struct amdgpu_trap_obj *cwsr_obj, bool enabled) { - uint64_t *l1tma; - if (!amdgpu_trap_is_enabled(adev)) return -EOPNOTSUPP; if (!cwsr_obj) return -EINVAL; - l1tma = (uint64_t *)(cwsr_obj->tma_cpu_addr); - l1tma[2] = enabled; + iosys_map_wr(&cwsr_obj->tma_map, 2 * sizeof(u64), u64, enabled); return 0; } \ No newline at end of file diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trap.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_trap.h index 6d4664469bad..57e338c91f0a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trap.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trap.h @@ -42,7 +42,7 @@ struct amdgpu_trap_obj { struct amdgpu_bo *tma_bo; struct amdgpu_bo_va *tba_va; struct amdgpu_bo_va *tma_va; - void *tma_cpu_addr; + struct iosys_map tma_map; }; struct amdgpu_trap_info { -- 2.34.1
