Am 12.07.2018 um 16:37 schrieb Michel Dänzer: > From: Michel Dänzer <michel.daenzer at amd.com> > > Instead of CPU invisible VRAM. Preparation for the following, no > functional change intended. > > v2: > * Also change amdgpu_vram_mgr_bo_invisible_size to > amdgpu_vram_mgr_bo_visible_size, allowing further simplification > (Christian König) > > Cc: stable at vger.kernel.org > Signed-off-by: Michel Dänzer <michel.daenzer at amd.com> Nice, that makes the code even more cleaner than I thought it would :) All three are Reviewed-by: Christian König <christian.koenig at amd.com>. Thanks, Christian. > --- > drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 5 ++--- > drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 4 ++-- > drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 20 ++++++++------------ > 5 files changed, 14 insertions(+), 19 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > index 8eaba0f4db10..77ab06bf26d5 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h > @@ -1593,7 +1593,7 @@ struct amdgpu_device { > > /* tracking pinned memory */ > u64 vram_pin_size; > - u64 invisible_pin_size; > + u64 visible_pin_size; > u64 gart_pin_size; > > /* amdkfd interface */ > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > index d041dddaad0c..b1ea43ee8b87 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > @@ -504,7 +504,7 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file > vram_gtt.vram_size = adev->gmc.real_vram_size; > vram_gtt.vram_size -= adev->vram_pin_size; > vram_gtt.vram_cpu_accessible_size = adev->gmc.visible_vram_size; > - vram_gtt.vram_cpu_accessible_size -= (adev->vram_pin_size - adev->invisible_pin_size); > + vram_gtt.vram_cpu_accessible_size -= adev->visible_pin_size; > vram_gtt.gtt_size = adev->mman.bdev.man[TTM_PL_TT].size; > vram_gtt.gtt_size *= PAGE_SIZE; > vram_gtt.gtt_size -= adev->gart_pin_size; > @@ -525,8 +525,7 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file > mem.cpu_accessible_vram.total_heap_size = > adev->gmc.visible_vram_size; > mem.cpu_accessible_vram.usable_heap_size = > - adev->gmc.visible_vram_size - > - (adev->vram_pin_size - adev->invisible_pin_size); > + adev->gmc.visible_vram_size - adev->visible_pin_size; > mem.cpu_accessible_vram.heap_usage = > amdgpu_vram_mgr_vis_usage(&adev->mman.bdev.man[TTM_PL_VRAM]); > mem.cpu_accessible_vram.max_allocation = > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > index 9ee678d63890..f0239feceab4 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c > @@ -917,7 +917,7 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain, > domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type); > if (domain == AMDGPU_GEM_DOMAIN_VRAM) { > adev->vram_pin_size += amdgpu_bo_size(bo); > - adev->invisible_pin_size += amdgpu_vram_mgr_bo_invisible_size(bo); > + adev->visible_pin_size += amdgpu_vram_mgr_bo_visible_size(bo); > } else if (domain == AMDGPU_GEM_DOMAIN_GTT) { > adev->gart_pin_size += amdgpu_bo_size(bo); > } > @@ -969,7 +969,7 @@ int amdgpu_bo_unpin(struct amdgpu_bo *bo) > > if (bo->tbo.mem.mem_type == TTM_PL_VRAM) { > adev->vram_pin_size -= amdgpu_bo_size(bo); > - adev->invisible_pin_size -= amdgpu_vram_mgr_bo_invisible_size(bo); > + adev->visible_pin_size -= amdgpu_vram_mgr_bo_visible_size(bo); > } else if (bo->tbo.mem.mem_type == TTM_PL_TT) { > adev->gart_pin_size -= amdgpu_bo_size(bo); > } > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h > index e5da4654b630..8b3cc6687769 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h > @@ -73,7 +73,7 @@ bool amdgpu_gtt_mgr_has_gart_addr(struct ttm_mem_reg *mem); > uint64_t amdgpu_gtt_mgr_usage(struct ttm_mem_type_manager *man); > int amdgpu_gtt_mgr_recover(struct ttm_mem_type_manager *man); > > -u64 amdgpu_vram_mgr_bo_invisible_size(struct amdgpu_bo *bo); > +u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo); > uint64_t amdgpu_vram_mgr_usage(struct ttm_mem_type_manager *man); > uint64_t amdgpu_vram_mgr_vis_usage(struct ttm_mem_type_manager *man); > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c > index f7a4bd5885a3..9cfa8a9ada92 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c > @@ -97,33 +97,29 @@ static u64 amdgpu_vram_mgr_vis_size(struct amdgpu_device *adev, > } > > /** > - * amdgpu_vram_mgr_bo_invisible_size - CPU invisible BO size > + * amdgpu_vram_mgr_bo_visible_size - CPU visible BO size > * > * @bo: &amdgpu_bo buffer object (must be in VRAM) > * > * Returns: > - * How much of the given &amdgpu_bo buffer object lies in CPU invisible VRAM. > + * How much of the given &amdgpu_bo buffer object lies in CPU visible VRAM. > */ > -u64 amdgpu_vram_mgr_bo_invisible_size(struct amdgpu_bo *bo) > +u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo) > { > struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); > struct ttm_mem_reg *mem = &bo->tbo.mem; > struct drm_mm_node *nodes = mem->mm_node; > unsigned pages = mem->num_pages; > - u64 usage = 0; > + u64 usage; > > if (amdgpu_gmc_vram_full_visible(&adev->gmc)) > - return 0; > + return amdgpu_bo_size(bo); > > if (mem->start >= adev->gmc.visible_vram_size >> PAGE_SHIFT) > - return amdgpu_bo_size(bo); > + return 0; > > - while (nodes && pages) { > - usage += nodes->size << PAGE_SHIFT; > - usage -= amdgpu_vram_mgr_vis_size(adev, nodes); > - pages -= nodes->size; > - ++nodes; > - } > + for (usage = 0; nodes && pages; pages -= nodes->size, nodes++) > + usage += amdgpu_vram_mgr_vis_size(adev, nodes); > > return usage; > }