> -----Original Message-----
> From: amd-gfx [mailto:[email protected]] On Behalf
> Of Christian König
> Sent: Thursday, July 27, 2017 11:44 AM
> To: [email protected]
> Subject: [PATCH 6/8] drm/amdgpu: add amdgpu_bo_create_reserved
> 
> From: Christian König <[email protected]>
> 
> Same as amdgpu_bo_create_kernel, but keeps the BO reserved.
> 
> Signed-off-by: Christian König <[email protected]>

Reviewed-by: Alex Deucher <[email protected]>

> ---
>  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
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to