[PATCH 1/8] drm/amdgpu: cleanup kptr handling

Deucher, Alexander Alexander.Deucher at amd.com
Thu Jul 27 17:36:42 UTC 2017


> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Christian König
> Sent: Thursday, July 27, 2017 11:44 AM
> To: amd-gfx at lists.freedesktop.org
> Subject: [PATCH 1/8] drm/amdgpu: cleanup kptr handling
> 
> From: Christian König <christian.koenig at amd.com>
> 
> Don't keep around the same pointer twice.
> 
> Signed-off-by: Christian König <christian.koenig at amd.com>

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

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h        |  1 -
>  drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c     |  2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 26 +++++++++++++++--
> ---------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_object.h |  1 +
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c     |  4 ++--
>  5 files changed, 19 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index fe96236..c539bdd 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -427,7 +427,6 @@ struct amdgpu_bo {
>  	struct ttm_bo_kmap_obj		kmap;
>  	u64				flags;
>  	unsigned			pin_count;
> -	void				*kptr;
>  	u64				tiling_flags;
>  	u64				metadata_flags;
>  	void				*metadata;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
> index f0c8123..f48c780 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
> @@ -246,7 +246,7 @@ static int amdgpufb_create(struct drm_fb_helper
> *helper,
>  	tmp = amdgpu_bo_gpu_offset(abo) - adev->mc.vram_start;
>  	info->fix.smem_start = adev->mc.aper_base + tmp;
>  	info->fix.smem_len = amdgpu_bo_size(abo);
> -	info->screen_base = abo->kptr;
> +	info->screen_base = amdgpu_bo_kptr(abo);
>  	info->screen_size = amdgpu_bo_size(abo);
> 
>  	drm_fb_helper_fill_var(info, &rfbdev->helper, sizes->fb_width,
> sizes->fb_height);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index 3ec43cf..8fddea4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -609,16 +609,16 @@ int amdgpu_bo_restore_from_shadow(struct
> amdgpu_device *adev,
> 
>  int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **ptr)
>  {
> -	bool is_iomem;
> +	void *kptr;
>  	long r;
> 
>  	if (bo->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS)
>  		return -EPERM;
> 
> -	if (bo->kptr) {
> -		if (ptr) {
> -			*ptr = bo->kptr;
> -		}
> +	kptr = amdgpu_bo_kptr(bo);
> +	if (kptr) {
> +		if (ptr)
> +			*ptr = kptr;
>  		return 0;
>  	}
> 
> @@ -631,19 +631,23 @@ int amdgpu_bo_kmap(struct amdgpu_bo *bo, void
> **ptr)
>  	if (r)
>  		return r;
> 
> -	bo->kptr = ttm_kmap_obj_virtual(&bo->kmap, &is_iomem);
>  	if (ptr)
> -		*ptr = bo->kptr;
> +		*ptr = amdgpu_bo_kptr(bo);
> 
>  	return 0;
>  }
> 
> +void *amdgpu_bo_kptr(struct amdgpu_bo *bo)
> +{
> +	bool is_iomem;
> +
> +	return ttm_kmap_obj_virtual(&bo->kmap, &is_iomem);
> +}
> +
>  void amdgpu_bo_kunmap(struct amdgpu_bo *bo)
>  {
> -	if (bo->kptr == NULL)
> -		return;
> -	bo->kptr = NULL;
> -	ttm_bo_kunmap(&bo->kmap);
> +	if (bo->kmap.bo)
> +		ttm_bo_kunmap(&bo->kmap);
>  }
> 
>  struct amdgpu_bo *amdgpu_bo_ref(struct amdgpu_bo *bo)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> index 833b172..f53d53d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> @@ -147,6 +147,7 @@ int amdgpu_bo_create_kernel(struct amdgpu_device
> *adev,
>  void amdgpu_bo_free_kernel(struct amdgpu_bo **bo, u64 *gpu_addr,
>  			   void **cpu_addr);
>  int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **ptr);
> +void *amdgpu_bo_kptr(struct amdgpu_bo *bo);
>  void amdgpu_bo_kunmap(struct amdgpu_bo *bo);
>  struct amdgpu_bo *amdgpu_bo_ref(struct amdgpu_bo *bo);
>  void amdgpu_bo_unref(struct amdgpu_bo **bo);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index fc482cc4..a1d4294 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -1059,7 +1059,7 @@ static int amdgpu_vm_update_level(struct
> amdgpu_device *adev,
>  	shadow = parent->bo->shadow;
> 
>  	if (vm->use_cpu_for_update) {
> -		pd_addr = (unsigned long)parent->bo->kptr;
> +		pd_addr = (unsigned long)amdgpu_bo_kptr(parent->bo);
>  		r = amdgpu_vm_wait_pd(adev, vm,
> AMDGPU_FENCE_OWNER_VM);
>  		if (unlikely(r))
>  			return r;
> @@ -1400,7 +1400,7 @@ static int amdgpu_vm_update_ptes(struct
> amdgpu_pte_update_params *params,
> 
>  		pt = entry->bo;
>  		if (use_cpu_update) {
> -			pe_start = (unsigned long)pt->kptr;
> +			pe_start = (unsigned long)amdgpu_bo_kptr(pt);
>  		} else {
>  			if (pt->shadow) {
>  				pe_start = amdgpu_bo_gpu_offset(pt-
> >shadow);
> --
> 2.7.4
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list