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; >