Thanks for the fix. I still don't quite understand how this works. We still call ttm_bo_move_ttm for a pinned BO. Maybe the function name is misleading. As I understand it, this doesn't move the memory physically. It just changes the GART address mapping? All that's needed is maintaining the flags to ensure that the pinned BO stays off the LRU lists and won't get swapped out? Thanks, Felix On 2017-09-01 03:24 AM, Christian König wrote: > From: Christian König <christian.koenig at amd.com> > > Otherwise we lose the NO_EVICT flag and can try to evict pinned BOs. > > Signed-off-by: Christian König <christian.koenig at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c > index e9a0518..ac14c18 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c > @@ -819,7 +819,7 @@ int amdgpu_ttm_bind(struct ttm_buffer_object *bo, struct ttm_mem_reg *bo_mem) > placement.busy_placement = &placements; > placements.fpfn = 0; > placements.lpfn = adev->mc.gart_size >> PAGE_SHIFT; > - placements.flags = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT; > + placements.flags = bo->mem.placement | TTM_PL_FLAG_TT; > > r = ttm_bo_mem_space(bo, &placement, &tmp, true, false); > if (unlikely(r))