[PATCH 4/4] drm/amdgpu: use AMDGPU_GEM_CREATE_VRAM_CLEARED for VM PD/PTs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Christian König
> Sent: Thursday, November 17, 2016 10:00 AM
> To: amd-gfx at lists.freedesktop.org
> Subject: [PATCH 4/4] drm/amdgpu: use
> AMDGPU_GEM_CREATE_VRAM_CLEARED for VM PD/PTs
> 
> From: Christian König <christian.koenig at amd.com>
> 
> Doesn't make much sense to have the same functionality twice.
> 
> Signed-off-by: Christian König <christian.koenig at amd.com>

Series is:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 99 ++---------------------------
> -----
>  1 file changed, 4 insertions(+), 95 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index d6c2839..d05546e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -530,70 +530,6 @@ static void amdgpu_vm_do_copy_ptes(struct
> amdgpu_pte_update_params *params,
>  }
> 
>  /**
> - * amdgpu_vm_clear_bo - initially clear the page dir/table
> - *
> - * @adev: amdgpu_device pointer
> - * @bo: bo to clear
> - *
> - * need to reserve bo first before calling it.
> - */
> -static int amdgpu_vm_clear_bo(struct amdgpu_device *adev,
> -			      struct amdgpu_vm *vm,
> -			      struct amdgpu_bo *bo)
> -{
> -	struct amdgpu_ring *ring;
> -	struct fence *fence = NULL;
> -	struct amdgpu_job *job;
> -	struct amdgpu_pte_update_params params;
> -	unsigned entries;
> -	uint64_t addr;
> -	int r;
> -
> -	ring = container_of(vm->entity.sched, struct amdgpu_ring, sched);
> -
> -	r = reservation_object_reserve_shared(bo->tbo.resv);
> -	if (r)
> -		return r;
> -
> -	r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false);
> -	if (r)
> -		goto error;
> -
> -	r = amdgpu_ttm_bind(&bo->tbo, &bo->tbo.mem);
> -	if (r)
> -		goto error;
> -
> -	addr = amdgpu_bo_gpu_offset(bo);
> -	entries = amdgpu_bo_size(bo) / 8;
> -
> -	r = amdgpu_job_alloc_with_ib(adev, 64, &job);
> -	if (r)
> -		goto error;
> -
> -	memset(&params, 0, sizeof(params));
> -	params.adev = adev;
> -	params.ib = &job->ibs[0];
> -	amdgpu_vm_do_set_ptes(&params, addr, 0, entries, 0, 0);
> -	amdgpu_ring_pad_ib(ring, &job->ibs[0]);
> -
> -	WARN_ON(job->ibs[0].length_dw > 64);
> -	r = amdgpu_job_submit(job, ring, &vm->entity,
> -			      AMDGPU_FENCE_OWNER_VM, &fence);
> -	if (r)
> -		goto error_free;
> -
> -	amdgpu_bo_fence(bo, fence, true);
> -	fence_put(fence);
> -	return 0;
> -
> -error_free:
> -	amdgpu_job_free(job);
> -
> -error:
> -	return r;
> -}
> -
> -/**
>   * amdgpu_vm_map_gart - Resolve gart mapping of addr
>   *
>   * @pages_addr: optional DMA address to use for lookup
> @@ -1435,7 +1371,8 @@ int amdgpu_vm_bo_map(struct amdgpu_device
> *adev,
>  				     AMDGPU_GEM_DOMAIN_VRAM,
> 
> AMDGPU_GEM_CREATE_NO_CPU_ACCESS |
>  				     AMDGPU_GEM_CREATE_SHADOW |
> -
> AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
> +
> AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS |
> +
> AMDGPU_GEM_CREATE_VRAM_CLEARED,
>  				     NULL, resv, &pt);
>  		if (r)
>  			goto error_free;
> @@ -1445,22 +1382,6 @@ int amdgpu_vm_bo_map(struct amdgpu_device
> *adev,
>  		 */
>  		pt->parent = amdgpu_bo_ref(vm->page_directory);
> 
> -		r = amdgpu_vm_clear_bo(adev, vm, pt);
> -		if (r) {
> -			amdgpu_bo_unref(&pt->shadow);
> -			amdgpu_bo_unref(&pt);
> -			goto error_free;
> -		}
> -
> -		if (pt->shadow) {
> -			r = amdgpu_vm_clear_bo(adev, vm, pt->shadow);
> -			if (r) {
> -				amdgpu_bo_unref(&pt->shadow);
> -				amdgpu_bo_unref(&pt);
> -				goto error_free;
> -			}
> -		}
> -
>  		vm->page_tables[pt_idx].bo = pt;
>  		vm->page_tables[pt_idx].addr = 0;
>  	}
> @@ -1642,7 +1563,8 @@ int amdgpu_vm_init(struct amdgpu_device *adev,
> struct amdgpu_vm *vm)
>  			     AMDGPU_GEM_DOMAIN_VRAM,
>  			     AMDGPU_GEM_CREATE_NO_CPU_ACCESS |
>  			     AMDGPU_GEM_CREATE_SHADOW |
> -			     AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
> +			     AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS |
> +			     AMDGPU_GEM_CREATE_VRAM_CLEARED,
>  			     NULL, NULL, &vm->page_directory);
>  	if (r)
>  		goto error_free_sched_entity;
> @@ -1651,24 +1573,11 @@ int amdgpu_vm_init(struct amdgpu_device
> *adev, struct amdgpu_vm *vm)
>  	if (r)
>  		goto error_free_page_directory;
> 
> -	r = amdgpu_vm_clear_bo(adev, vm, vm->page_directory);
> -	if (r)
> -		goto error_unreserve;
> -
> -	if (vm->page_directory->shadow) {
> -		r = amdgpu_vm_clear_bo(adev, vm, vm->page_directory-
> >shadow);
> -		if (r)
> -			goto error_unreserve;
> -	}
> -
>  	vm->last_eviction_counter = atomic64_read(&adev-
> >num_evictions);
>  	amdgpu_bo_unreserve(vm->page_directory);
> 
>  	return 0;
> 
> -error_unreserve:
> -	amdgpu_bo_unreserve(vm->page_directory);
> -
>  error_free_page_directory:
>  	amdgpu_bo_unref(&vm->page_directory->shadow);
>  	amdgpu_bo_unref(&vm->page_directory);
> --
> 2.5.0
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux