aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2018-07-11 06:06:31 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-07-13 15:46:11 -0400
commitddc21af4d0f37f42b33c54cb69b215997fe5b082 (patch)
tree2864822395009d0302e5fbfeb355eb47704504e4 /drivers/gpu/drm/amd
parentaa16b6c6b4d979234f830a48add47d02c12bb569 (diff)
drm/amdgpu: Keep track of amount of pinned CPU visible VRAM
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@vger.kernel.org Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_object.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c20
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 b38c170fb95c..51b16de008bb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1590,7 +1590,7 @@ struct amdgpu_device {
1590 1590
1591 /* tracking pinned memory */ 1591 /* tracking pinned memory */
1592 u64 vram_pin_size; 1592 u64 vram_pin_size;
1593 u64 invisible_pin_size; 1593 u64 visible_pin_size;
1594 u64 gart_pin_size; 1594 u64 gart_pin_size;
1595 1595
1596 /* amdkfd interface */ 1596 /* amdkfd interface */
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index 2060f208e60b..c00bd9591dad 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
504 vram_gtt.vram_size = adev->gmc.real_vram_size; 504 vram_gtt.vram_size = adev->gmc.real_vram_size;
505 vram_gtt.vram_size -= adev->vram_pin_size; 505 vram_gtt.vram_size -= adev->vram_pin_size;
506 vram_gtt.vram_cpu_accessible_size = adev->gmc.visible_vram_size; 506 vram_gtt.vram_cpu_accessible_size = adev->gmc.visible_vram_size;
507 vram_gtt.vram_cpu_accessible_size -= (adev->vram_pin_size - adev->invisible_pin_size); 507 vram_gtt.vram_cpu_accessible_size -= adev->visible_pin_size;
508 vram_gtt.gtt_size = adev->mman.bdev.man[TTM_PL_TT].size; 508 vram_gtt.gtt_size = adev->mman.bdev.man[TTM_PL_TT].size;
509 vram_gtt.gtt_size *= PAGE_SIZE; 509 vram_gtt.gtt_size *= PAGE_SIZE;
510 vram_gtt.gtt_size -= adev->gart_pin_size; 510 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
525 mem.cpu_accessible_vram.total_heap_size = 525 mem.cpu_accessible_vram.total_heap_size =
526 adev->gmc.visible_vram_size; 526 adev->gmc.visible_vram_size;
527 mem.cpu_accessible_vram.usable_heap_size = 527 mem.cpu_accessible_vram.usable_heap_size =
528 adev->gmc.visible_vram_size - 528 adev->gmc.visible_vram_size - adev->visible_pin_size;
529 (adev->vram_pin_size - adev->invisible_pin_size);
530 mem.cpu_accessible_vram.heap_usage = 529 mem.cpu_accessible_vram.heap_usage =
531 amdgpu_vram_mgr_vis_usage(&adev->mman.bdev.man[TTM_PL_VRAM]); 530 amdgpu_vram_mgr_vis_usage(&adev->mman.bdev.man[TTM_PL_VRAM]);
532 mem.cpu_accessible_vram.max_allocation = 531 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,
917 domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type); 917 domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type);
918 if (domain == AMDGPU_GEM_DOMAIN_VRAM) { 918 if (domain == AMDGPU_GEM_DOMAIN_VRAM) {
919 adev->vram_pin_size += amdgpu_bo_size(bo); 919 adev->vram_pin_size += amdgpu_bo_size(bo);
920 adev->invisible_pin_size += amdgpu_vram_mgr_bo_invisible_size(bo); 920 adev->visible_pin_size += amdgpu_vram_mgr_bo_visible_size(bo);
921 } else if (domain == AMDGPU_GEM_DOMAIN_GTT) { 921 } else if (domain == AMDGPU_GEM_DOMAIN_GTT) {
922 adev->gart_pin_size += amdgpu_bo_size(bo); 922 adev->gart_pin_size += amdgpu_bo_size(bo);
923 } 923 }
@@ -969,7 +969,7 @@ int amdgpu_bo_unpin(struct amdgpu_bo *bo)
969 969
970 if (bo->tbo.mem.mem_type == TTM_PL_VRAM) { 970 if (bo->tbo.mem.mem_type == TTM_PL_VRAM) {
971 adev->vram_pin_size -= amdgpu_bo_size(bo); 971 adev->vram_pin_size -= amdgpu_bo_size(bo);
972 adev->invisible_pin_size -= amdgpu_vram_mgr_bo_invisible_size(bo); 972 adev->visible_pin_size -= amdgpu_vram_mgr_bo_visible_size(bo);
973 } else if (bo->tbo.mem.mem_type == TTM_PL_TT) { 973 } else if (bo->tbo.mem.mem_type == TTM_PL_TT) {
974 adev->gart_pin_size -= amdgpu_bo_size(bo); 974 adev->gart_pin_size -= amdgpu_bo_size(bo);
975 } 975 }
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);
73uint64_t amdgpu_gtt_mgr_usage(struct ttm_mem_type_manager *man); 73uint64_t amdgpu_gtt_mgr_usage(struct ttm_mem_type_manager *man);
74int amdgpu_gtt_mgr_recover(struct ttm_mem_type_manager *man); 74int amdgpu_gtt_mgr_recover(struct ttm_mem_type_manager *man);
75 75
76u64 amdgpu_vram_mgr_bo_invisible_size(struct amdgpu_bo *bo); 76u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo);
77uint64_t amdgpu_vram_mgr_usage(struct ttm_mem_type_manager *man); 77uint64_t amdgpu_vram_mgr_usage(struct ttm_mem_type_manager *man);
78uint64_t amdgpu_vram_mgr_vis_usage(struct ttm_mem_type_manager *man); 78uint64_t amdgpu_vram_mgr_vis_usage(struct ttm_mem_type_manager *man);
79 79
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,
97} 97}
98 98
99/** 99/**
100 * amdgpu_vram_mgr_bo_invisible_size - CPU invisible BO size 100 * amdgpu_vram_mgr_bo_visible_size - CPU visible BO size
101 * 101 *
102 * @bo: &amdgpu_bo buffer object (must be in VRAM) 102 * @bo: &amdgpu_bo buffer object (must be in VRAM)
103 * 103 *
104 * Returns: 104 * Returns:
105 * How much of the given &amdgpu_bo buffer object lies in CPU invisible VRAM. 105 * How much of the given &amdgpu_bo buffer object lies in CPU visible VRAM.
106 */ 106 */
107u64 amdgpu_vram_mgr_bo_invisible_size(struct amdgpu_bo *bo) 107u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo)
108{ 108{
109 struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); 109 struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
110 struct ttm_mem_reg *mem = &bo->tbo.mem; 110 struct ttm_mem_reg *mem = &bo->tbo.mem;
111 struct drm_mm_node *nodes = mem->mm_node; 111 struct drm_mm_node *nodes = mem->mm_node;
112 unsigned pages = mem->num_pages; 112 unsigned pages = mem->num_pages;
113 u64 usage = 0; 113 u64 usage;
114 114
115 if (amdgpu_gmc_vram_full_visible(&adev->gmc)) 115 if (amdgpu_gmc_vram_full_visible(&adev->gmc))
116 return 0; 116 return amdgpu_bo_size(bo);
117 117
118 if (mem->start >= adev->gmc.visible_vram_size >> PAGE_SHIFT) 118 if (mem->start >= adev->gmc.visible_vram_size >> PAGE_SHIFT)
119 return amdgpu_bo_size(bo); 119 return 0;
120 120
121 while (nodes && pages) { 121 for (usage = 0; nodes && pages; pages -= nodes->size, nodes++)
122 usage += nodes->size << PAGE_SHIFT; 122 usage += amdgpu_vram_mgr_vis_size(adev, nodes);
123 usage -= amdgpu_vram_mgr_vis_size(adev, nodes);
124 pages -= nodes->size;
125 ++nodes;
126 }
127 123
128 return usage; 124 return usage;
129} 125}