[PATCH 6/8] drm/amdgpu: add amdgpu_bo_create_reserved

Deucher, Alexander Alexander.Deucher at amd.com
Thu Jul 27 17:42:43 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 6/8] drm/amdgpu: add amdgpu_bo_create_reserved
> 
> From: Christian König <christian.koenig at amd.com>
> 
> Same as amdgpu_bo_create_kernel, but keeps the BO reserved.
> 
> 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_object.c | 48
> +++++++++++++++++++++++++-----
>  drivers/gpu/drm/amd/amdgpu/amdgpu_object.h |  4 +++
>  2 files changed, 44 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index 81d40e3..494b793 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -220,7 +220,7 @@ static void amdgpu_fill_placement_to_bo(struct
> amdgpu_bo *bo,
>  }
> 
>  /**
> - * amdgpu_bo_create_kernel - create BO for kernel use
> + * amdgpu_bo_create_reserved - create reserved BO for kernel use
>   *
>   * @adev: amdgpu device object
>   * @size: size for the new BO
> @@ -230,14 +230,15 @@ static void amdgpu_fill_placement_to_bo(struct
> amdgpu_bo *bo,
>   * @gpu_addr: GPU addr of the pinned BO
>   * @cpu_addr: optional CPU address mapping
>   *
> - * Allocates and pins a BO for kernel internal use.
> + * Allocates and pins a BO for kernel internal use, and returns it still
> + * reserved.
>   *
>   * Returns 0 on success, negative error code otherwise.
>   */
> -int amdgpu_bo_create_kernel(struct amdgpu_device *adev,
> -			    unsigned long size, int align,
> -			    u32 domain, struct amdgpu_bo **bo_ptr,
> -			    u64 *gpu_addr, void **cpu_addr)
> +int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
> +			      unsigned long size, int align,
> +			      u32 domain, struct amdgpu_bo **bo_ptr,
> +			      u64 *gpu_addr, void **cpu_addr)
>  {
>  	bool free = false;
>  	int r;
> @@ -275,8 +276,6 @@ int amdgpu_bo_create_kernel(struct amdgpu_device
> *adev,
>  		}
>  	}
> 
> -	amdgpu_bo_unreserve(*bo_ptr);
> -
>  	return 0;
> 
>  error_unreserve:
> @@ -290,6 +289,39 @@ int amdgpu_bo_create_kernel(struct
> amdgpu_device *adev,
>  }
> 
>  /**
> + * amdgpu_bo_create_kernel - create BO for kernel use
> + *
> + * @adev: amdgpu device object
> + * @size: size for the new BO
> + * @align: alignment for the new BO
> + * @domain: where to place it
> + * @bo_ptr: resulting BO
> + * @gpu_addr: GPU addr of the pinned BO
> + * @cpu_addr: optional CPU address mapping
> + *
> + * Allocates and pins a BO for kernel internal use.
> + *
> + * Returns 0 on success, negative error code otherwise.
> + */
> +int amdgpu_bo_create_kernel(struct amdgpu_device *adev,
> +			    unsigned long size, int align,
> +			    u32 domain, struct amdgpu_bo **bo_ptr,
> +			    u64 *gpu_addr, void **cpu_addr)
> +{
> +	int r;
> +
> +	r = amdgpu_bo_create_reserved(adev, size, align, domain, bo_ptr,
> +				      gpu_addr, cpu_addr);
> +
> +	if (r)
> +		return r;
> +
> +	amdgpu_bo_unreserve(*bo_ptr);
> +
> +	return 0;
> +}
> +
> +/**
>   * amdgpu_bo_free_kernel - free BO for kernel use
>   *
>   * @bo: amdgpu BO to free
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> index 3b92d52..cbf6e6d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> @@ -201,6 +201,10 @@ int amdgpu_bo_create_restricted(struct
> amdgpu_device *adev,
>  				struct ttm_placement *placement,
>  			        struct reservation_object *resv,
>  				struct amdgpu_bo **bo_ptr);
> +int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
> +			      unsigned long size, int align,
> +			      u32 domain, struct amdgpu_bo **bo_ptr,
> +			      u64 *gpu_addr, void **cpu_addr);
>  int amdgpu_bo_create_kernel(struct amdgpu_device *adev,
>  			    unsigned long size, int align,
>  			    u32 domain, struct amdgpu_bo **bo_ptr,
> --
> 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