diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2018-07-11 06:06:31 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-07-13 15:46:11 -0400 |
commit | ddc21af4d0f37f42b33c54cb69b215997fe5b082 (patch) | |
tree | 2864822395009d0302e5fbfeb355eb47704504e4 /drivers/gpu/drm/amd | |
parent | aa16b6c6b4d979234f830a48add47d02c12bb569 (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.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 2 | ||||
-rw-r--r-- | 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 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); | |||
73 | uint64_t amdgpu_gtt_mgr_usage(struct ttm_mem_type_manager *man); | 73 | uint64_t amdgpu_gtt_mgr_usage(struct ttm_mem_type_manager *man); |
74 | int amdgpu_gtt_mgr_recover(struct ttm_mem_type_manager *man); | 74 | int amdgpu_gtt_mgr_recover(struct ttm_mem_type_manager *man); |
75 | 75 | ||
76 | u64 amdgpu_vram_mgr_bo_invisible_size(struct amdgpu_bo *bo); | 76 | u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo); |
77 | uint64_t amdgpu_vram_mgr_usage(struct ttm_mem_type_manager *man); | 77 | uint64_t amdgpu_vram_mgr_usage(struct ttm_mem_type_manager *man); |
78 | uint64_t amdgpu_vram_mgr_vis_usage(struct ttm_mem_type_manager *man); | 78 | uint64_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 | */ |
107 | u64 amdgpu_vram_mgr_bo_invisible_size(struct amdgpu_bo *bo) | 107 | u64 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 | } |