[PATCH v2 1/3] drm/amdgpu: Keep track of amount of pinned CPU visible VRAM
Christian König
ckoenig.leichtzumerken at gmail.com
Fri Jul 13 06:53:37 UTC 2018
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;
> }
More information about the amd-gfx
mailing list