diff options
| author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2021-04-13 12:25:16 +0200 | 
|---|---|---|
| committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2021-04-13 12:25:17 +0200 | 
| commit | cd951b3971cdc1f8c76b075f2c97ff357bf141e2 (patch) | |
| tree | 0af9a1eeba0011d2dffc360087808c4c0b7fee54 /drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |
| parent | c103b850721e4a79ff9578f131888129c37a4679 (diff) | |
| parent | cbb8f989d5a07cb3e39e9c149a6f89d6c83432aa (diff) | |
Merge tag 'amd-drm-next-5.13-2021-04-12' of https://gitlab.freedesktop.org/agd5f/linux into drm-next
amd-drm-next-5.13-2021-04-12:
amdgpu:
- Re-enable GPU reset on VanGogh
- Enable DPM flags for SMART_SUSPEND and MAY_SKIP_RESUME
- Disentangle HG from vga_switcheroo
- S0ix fixes
- W=1 fixes
- Resource iterator fixes
- DMCUB updates
- UBSAN fixes
- More PM API cleanup
- Aldebaran updates
- Modifier fixes
- Enable VCN load balancing with asymmetric engines
- Rework BO structs
- Aldebaran reset support
- Initial LTTPR display work
- Display MALL fixes
- Fall back to YCbCr420 when YCbCr444 fails
- SR-IOV fixes
- RAS updates
- Misc cleanups and fixes
radeon:
- Typo fixes
- Fix error handling for firmware on r6xx
- Fix a missing check in DP MST handling
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210412220732.3845-1-alexander.deucher@amd.com
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 21 | 
1 files changed, 14 insertions, 7 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index f314e1e269cd..0ffdf847cad0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -869,6 +869,7 @@ static void amdgpu_vm_bo_param(struct amdgpu_device *adev, struct amdgpu_vm *vm,  	bp->domain = amdgpu_bo_get_preferred_pin_domain(adev, bp->domain);  	bp->flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS |  		AMDGPU_GEM_CREATE_CPU_GTT_USWC; +	bp->bo_ptr_size = sizeof(struct amdgpu_bo);  	if (vm->use_cpu_for_update)  		bp->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;  	else if (!vm->root.base.bo || vm->root.base.bo->shadow) @@ -2197,8 +2198,8 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev,  	uint64_t eaddr;  	/* validate the parameters */ -	if (saddr & AMDGPU_GPU_PAGE_MASK || offset & AMDGPU_GPU_PAGE_MASK || -	    size == 0 || size & AMDGPU_GPU_PAGE_MASK) +	if (saddr & ~PAGE_MASK || offset & ~PAGE_MASK || +	    size == 0 || size & ~PAGE_MASK)  		return -EINVAL;  	/* make sure object fit at this offset */ @@ -2263,8 +2264,8 @@ int amdgpu_vm_bo_replace_map(struct amdgpu_device *adev,  	int r;  	/* validate the parameters */ -	if (saddr & AMDGPU_GPU_PAGE_MASK || offset & AMDGPU_GPU_PAGE_MASK || -	    size == 0 || size & AMDGPU_GPU_PAGE_MASK) +	if (saddr & ~PAGE_MASK || offset & ~PAGE_MASK || +	    size == 0 || size & ~PAGE_MASK)  		return -EINVAL;  	/* make sure object fit at this offset */ @@ -2409,7 +2410,7 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev,  			after->start = eaddr + 1;  			after->last = tmp->last;  			after->offset = tmp->offset; -			after->offset += after->start - tmp->start; +			after->offset += (after->start - tmp->start) << PAGE_SHIFT;  			after->flags = tmp->flags;  			after->bo_va = tmp->bo_va;  			list_add(&after->list, &tmp->bo_va->invalids); @@ -3300,7 +3301,7 @@ bool amdgpu_vm_handle_fault(struct amdgpu_device *adev, u32 pasid,  	struct amdgpu_bo *root;  	uint64_t value, flags;  	struct amdgpu_vm *vm; -	long r; +	int r;  	spin_lock(&adev->vm_manager.pasid_lock);  	vm = idr_find(&adev->vm_manager.pasid_idr, pasid); @@ -3349,6 +3350,12 @@ bool amdgpu_vm_handle_fault(struct amdgpu_device *adev, u32 pasid,  		value = 0;  	} +	r = dma_resv_reserve_shared(root->tbo.base.resv, 1); +	if (r) { +		pr_debug("failed %d to reserve fence slot\n", r); +		goto error_unlock; +	} +  	r = amdgpu_vm_bo_update_mapping(adev, adev, vm, true, false, NULL, addr,  					addr, flags, value, NULL, NULL,  					NULL); @@ -3360,7 +3367,7 @@ bool amdgpu_vm_handle_fault(struct amdgpu_device *adev, u32 pasid,  error_unlock:  	amdgpu_bo_unreserve(root);  	if (r < 0) -		DRM_ERROR("Can't handle page fault (%ld)\n", r); +		DRM_ERROR("Can't handle page fault (%d)\n", r);  error_unref:  	amdgpu_bo_unref(&root);  | 
