|
@@ -46,14 +46,14 @@ int amdgpu_allocate_static_csa(struct amdgpu_device *adev)
|
|
|
* address within META_DATA init package to support SRIOV gfx preemption.
|
|
|
*/
|
|
|
|
|
|
-int amdgpu_map_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm)
|
|
|
+int amdgpu_map_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm,
|
|
|
+ struct amdgpu_bo_va **bo_va)
|
|
|
{
|
|
|
- int r;
|
|
|
- struct amdgpu_bo_va *bo_va;
|
|
|
struct ww_acquire_ctx ticket;
|
|
|
struct list_head list;
|
|
|
struct amdgpu_bo_list_entry pd;
|
|
|
struct ttm_validate_buffer csa_tv;
|
|
|
+ int r;
|
|
|
|
|
|
INIT_LIST_HEAD(&list);
|
|
|
INIT_LIST_HEAD(&csa_tv.head);
|
|
@@ -69,34 +69,33 @@ int amdgpu_map_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm)
|
|
|
return r;
|
|
|
}
|
|
|
|
|
|
- bo_va = amdgpu_vm_bo_add(adev, vm, adev->virt.csa_obj);
|
|
|
- if (!bo_va) {
|
|
|
+ *bo_va = amdgpu_vm_bo_add(adev, vm, adev->virt.csa_obj);
|
|
|
+ if (!*bo_va) {
|
|
|
ttm_eu_backoff_reservation(&ticket, &list);
|
|
|
DRM_ERROR("failed to create bo_va for static CSA\n");
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
- r = amdgpu_vm_alloc_pts(adev, bo_va->vm, AMDGPU_CSA_VADDR,
|
|
|
- AMDGPU_CSA_SIZE);
|
|
|
+ r = amdgpu_vm_alloc_pts(adev, (*bo_va)->vm, AMDGPU_CSA_VADDR,
|
|
|
+ AMDGPU_CSA_SIZE);
|
|
|
if (r) {
|
|
|
DRM_ERROR("failed to allocate pts for static CSA, err=%d\n", r);
|
|
|
- amdgpu_vm_bo_rmv(adev, bo_va);
|
|
|
+ amdgpu_vm_bo_rmv(adev, *bo_va);
|
|
|
ttm_eu_backoff_reservation(&ticket, &list);
|
|
|
return r;
|
|
|
}
|
|
|
|
|
|
- r = amdgpu_vm_bo_map(adev, bo_va, AMDGPU_CSA_VADDR, 0,AMDGPU_CSA_SIZE,
|
|
|
- AMDGPU_PTE_READABLE | AMDGPU_PTE_WRITEABLE |
|
|
|
- AMDGPU_PTE_EXECUTABLE);
|
|
|
+ r = amdgpu_vm_bo_map(adev, *bo_va, AMDGPU_CSA_VADDR, 0, AMDGPU_CSA_SIZE,
|
|
|
+ AMDGPU_PTE_READABLE | AMDGPU_PTE_WRITEABLE |
|
|
|
+ AMDGPU_PTE_EXECUTABLE);
|
|
|
|
|
|
if (r) {
|
|
|
DRM_ERROR("failed to do bo_map on static CSA, err=%d\n", r);
|
|
|
- amdgpu_vm_bo_rmv(adev, bo_va);
|
|
|
+ amdgpu_vm_bo_rmv(adev, *bo_va);
|
|
|
ttm_eu_backoff_reservation(&ticket, &list);
|
|
|
return r;
|
|
|
}
|
|
|
|
|
|
- vm->csa_bo_va = bo_va;
|
|
|
ttm_eu_backoff_reservation(&ticket, &list);
|
|
|
return 0;
|
|
|
}
|