[PATCH] drm/amdgpu: add helper to convert a ttm bo to amdgpu_bo

Andres Rodriguez andresx7 at gmail.com
Tue Sep 19 03:20:19 UTC 2017


This is a small cleanup patch from my initial naive attempt at 
extracting a TTM bo in amdgpu_sync_resv(). It didn't end up being useful 
in that specific case, but I thought I'd send it out anyways in case you 
find it useful.

Regards,
Andres


On 2017-09-18 11:17 PM, Andres Rodriguez wrote:
> Signed-off-by: Andres Rodriguez <andresx7 at gmail.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 8 +++-----
>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 5 +++++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c    | 9 +++++----
>   3 files changed, 13 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index 726a662..73eedd3 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -40,9 +40,7 @@
>   static void amdgpu_ttm_bo_destroy(struct ttm_buffer_object *tbo)
>   {
>   	struct amdgpu_device *adev = amdgpu_ttm_adev(tbo->bdev);
> -	struct amdgpu_bo *bo;
> -
> -	bo = container_of(tbo, struct amdgpu_bo, tbo);
> +	struct amdgpu_bo *bo = ttm_to_amdgpu_bo(tbo);
>   
>   	amdgpu_bo_kunmap(bo);
>   
> @@ -891,7 +889,7 @@ void amdgpu_bo_move_notify(struct ttm_buffer_object *bo,
>   	if (!amdgpu_ttm_bo_is_amdgpu_bo(bo))
>   		return;
>   
> -	abo = container_of(bo, struct amdgpu_bo, tbo);
> +	abo = ttm_to_amdgpu_bo(bo);
>   	amdgpu_vm_bo_invalidate(adev, abo, evict);
>   
>   	amdgpu_bo_kunmap(abo);
> @@ -918,7 +916,7 @@ int amdgpu_bo_fault_reserve_notify(struct ttm_buffer_object *bo)
>   	if (!amdgpu_ttm_bo_is_amdgpu_bo(bo))
>   		return 0;
>   
> -	abo = container_of(bo, struct amdgpu_bo, tbo);
> +	abo = ttm_to_amdgpu_bo(bo);
>   
>   	/* Remember that this BO was accessed by the CPU */
>   	abo->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> index 39b6bf6..c26ef53 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
> @@ -94,6 +94,11 @@ struct amdgpu_bo {
>   	};
>   };
>   
> +static inline struct amdgpu_bo *ttm_to_amdgpu_bo(struct ttm_buffer_object *tbo)
> +{
> +	return container_of(tbo, struct amdgpu_bo, tbo);
> +}
> +
>   /**
>    * amdgpu_mem_type_to_domain - return domain corresponding to mem_type
>    * @mem_type:	ttm memory type
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index b2b11e1..c9c059d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -44,6 +44,7 @@
>   #include <linux/pagemap.h>
>   #include <linux/debugfs.h>
>   #include "amdgpu.h"
> +#include "amdgpu_object.h"
>   #include "amdgpu_trace.h"
>   #include "bif/bif_4_1_d.h"
>   
> @@ -209,7 +210,7 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo,
>   		placement->num_busy_placement = 1;
>   		return;
>   	}
> -	abo = container_of(bo, struct amdgpu_bo, tbo);
> +	abo = ttm_to_amdgpu_bo(bo);
>   	switch (bo->mem.mem_type) {
>   	case TTM_PL_VRAM:
>   		if (adev->mman.buffer_funcs &&
> @@ -257,7 +258,7 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo,
>   
>   static int amdgpu_verify_access(struct ttm_buffer_object *bo, struct file *filp)
>   {
> -	struct amdgpu_bo *abo = container_of(bo, struct amdgpu_bo, tbo);
> +	struct amdgpu_bo *abo = ttm_to_amdgpu_bo(bo);
>   
>   	if (amdgpu_ttm_tt_get_usermm(bo->ttm))
>   		return -EPERM;
> @@ -484,7 +485,7 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo,
>   	int r;
>   
>   	/* Can't move a pinned BO */
> -	abo = container_of(bo, struct amdgpu_bo, tbo);
> +	abo = ttm_to_amdgpu_bo(bo);
>   	if (WARN_ON_ONCE(abo->pin_count > 0))
>   		return -EINVAL;
>   
> @@ -1172,7 +1173,7 @@ static int amdgpu_ttm_access_memory(struct ttm_buffer_object *bo,
>   				    unsigned long offset,
>   				    void *buf, int len, int write)
>   {
> -	struct amdgpu_bo *abo = container_of(bo, struct amdgpu_bo, tbo);
> +	struct amdgpu_bo *abo = ttm_to_amdgpu_bo(bo);
>   	struct amdgpu_device *adev = amdgpu_ttm_adev(abo->tbo.bdev);
>   	struct drm_mm_node *nodes = abo->tbo.mem.mm_node;
>   	uint32_t value = 0;
> 


More information about the amd-gfx mailing list