diff options
author | Sean Paul <seanpaul@chromium.org> | 2017-05-18 09:24:30 -0400 |
---|---|---|
committer | Sean Paul <seanpaul@chromium.org> | 2017-05-18 09:24:30 -0400 |
commit | 6b7781b42dc9bc9bcd1523b6c24b876cdda0bef3 (patch) | |
tree | ee55c67e4ea30b9eb44f301ba0bde2e631a26162 /drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | |
parent | 52d9d38c183bf0e09601d875ea31bb53c05dd8cf (diff) | |
parent | e98c58e55f68f8785aebfab1f8c9a03d8de0afe1 (diff) |
Merge remote-tracking branch 'airlied/drm-next' into drm-misc-next
Picking up drm-next @ 4.12-rc1 in order to apply Michal Hocko's vmalloc patch set
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index 6a3028c13580..b5fa003c1341 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | |||
@@ -203,7 +203,9 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo, | |||
203 | abo = container_of(bo, struct amdgpu_bo, tbo); | 203 | abo = container_of(bo, struct amdgpu_bo, tbo); |
204 | switch (bo->mem.mem_type) { | 204 | switch (bo->mem.mem_type) { |
205 | case TTM_PL_VRAM: | 205 | case TTM_PL_VRAM: |
206 | if (adev->mman.buffer_funcs_ring->ready == false) { | 206 | if (adev->mman.buffer_funcs && |
207 | adev->mman.buffer_funcs_ring && | ||
208 | adev->mman.buffer_funcs_ring->ready == false) { | ||
207 | amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_CPU); | 209 | amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_CPU); |
208 | } else { | 210 | } else { |
209 | amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_GTT); | 211 | amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_GTT); |
@@ -763,7 +765,7 @@ int amdgpu_ttm_recover_gart(struct amdgpu_device *adev) | |||
763 | { | 765 | { |
764 | struct amdgpu_ttm_tt *gtt, *tmp; | 766 | struct amdgpu_ttm_tt *gtt, *tmp; |
765 | struct ttm_mem_reg bo_mem; | 767 | struct ttm_mem_reg bo_mem; |
766 | uint32_t flags; | 768 | uint64_t flags; |
767 | int r; | 769 | int r; |
768 | 770 | ||
769 | bo_mem.mem_type = TTM_PL_TT; | 771 | bo_mem.mem_type = TTM_PL_TT; |
@@ -1038,11 +1040,17 @@ uint64_t amdgpu_ttm_tt_pte_flags(struct amdgpu_device *adev, struct ttm_tt *ttm, | |||
1038 | static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo, | 1040 | static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo, |
1039 | const struct ttm_place *place) | 1041 | const struct ttm_place *place) |
1040 | { | 1042 | { |
1041 | if (bo->mem.mem_type == TTM_PL_VRAM && | 1043 | unsigned long num_pages = bo->mem.num_pages; |
1042 | bo->mem.start == AMDGPU_BO_INVALID_OFFSET) { | 1044 | struct drm_mm_node *node = bo->mem.mm_node; |
1043 | unsigned long num_pages = bo->mem.num_pages; | 1045 | |
1044 | struct drm_mm_node *node = bo->mem.mm_node; | 1046 | if (bo->mem.start != AMDGPU_BO_INVALID_OFFSET) |
1047 | return ttm_bo_eviction_valuable(bo, place); | ||
1048 | |||
1049 | switch (bo->mem.mem_type) { | ||
1050 | case TTM_PL_TT: | ||
1051 | return true; | ||
1045 | 1052 | ||
1053 | case TTM_PL_VRAM: | ||
1046 | /* Check each drm MM node individually */ | 1054 | /* Check each drm MM node individually */ |
1047 | while (num_pages) { | 1055 | while (num_pages) { |
1048 | if (place->fpfn < (node->start + node->size) && | 1056 | if (place->fpfn < (node->start + node->size) && |
@@ -1052,8 +1060,10 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo, | |||
1052 | num_pages -= node->size; | 1060 | num_pages -= node->size; |
1053 | ++node; | 1061 | ++node; |
1054 | } | 1062 | } |
1063 | break; | ||
1055 | 1064 | ||
1056 | return false; | 1065 | default: |
1066 | break; | ||
1057 | } | 1067 | } |
1058 | 1068 | ||
1059 | return ttm_bo_eviction_valuable(bo, place); | 1069 | return ttm_bo_eviction_valuable(bo, place); |
@@ -1188,7 +1198,7 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev) | |||
1188 | return; | 1198 | return; |
1189 | amdgpu_ttm_debugfs_fini(adev); | 1199 | amdgpu_ttm_debugfs_fini(adev); |
1190 | if (adev->stollen_vga_memory) { | 1200 | if (adev->stollen_vga_memory) { |
1191 | r = amdgpu_bo_reserve(adev->stollen_vga_memory, false); | 1201 | r = amdgpu_bo_reserve(adev->stollen_vga_memory, true); |
1192 | if (r == 0) { | 1202 | if (r == 0) { |
1193 | amdgpu_bo_unpin(adev->stollen_vga_memory); | 1203 | amdgpu_bo_unpin(adev->stollen_vga_memory); |
1194 | amdgpu_bo_unreserve(adev->stollen_vga_memory); | 1204 | amdgpu_bo_unreserve(adev->stollen_vga_memory); |
@@ -1401,6 +1411,8 @@ error_free: | |||
1401 | 1411 | ||
1402 | #if defined(CONFIG_DEBUG_FS) | 1412 | #if defined(CONFIG_DEBUG_FS) |
1403 | 1413 | ||
1414 | extern void amdgpu_gtt_mgr_print(struct seq_file *m, struct ttm_mem_type_manager | ||
1415 | *man); | ||
1404 | static int amdgpu_mm_dump_table(struct seq_file *m, void *data) | 1416 | static int amdgpu_mm_dump_table(struct seq_file *m, void *data) |
1405 | { | 1417 | { |
1406 | struct drm_info_node *node = (struct drm_info_node *)m->private; | 1418 | struct drm_info_node *node = (struct drm_info_node *)m->private; |
@@ -1414,11 +1426,17 @@ static int amdgpu_mm_dump_table(struct seq_file *m, void *data) | |||
1414 | spin_lock(&glob->lru_lock); | 1426 | spin_lock(&glob->lru_lock); |
1415 | drm_mm_print(mm, &p); | 1427 | drm_mm_print(mm, &p); |
1416 | spin_unlock(&glob->lru_lock); | 1428 | spin_unlock(&glob->lru_lock); |
1417 | if (ttm_pl == TTM_PL_VRAM) | 1429 | switch (ttm_pl) { |
1430 | case TTM_PL_VRAM: | ||
1418 | seq_printf(m, "man size:%llu pages, ram usage:%lluMB, vis usage:%lluMB\n", | 1431 | seq_printf(m, "man size:%llu pages, ram usage:%lluMB, vis usage:%lluMB\n", |
1419 | adev->mman.bdev.man[ttm_pl].size, | 1432 | adev->mman.bdev.man[ttm_pl].size, |
1420 | (u64)atomic64_read(&adev->vram_usage) >> 20, | 1433 | (u64)atomic64_read(&adev->vram_usage) >> 20, |
1421 | (u64)atomic64_read(&adev->vram_vis_usage) >> 20); | 1434 | (u64)atomic64_read(&adev->vram_vis_usage) >> 20); |
1435 | break; | ||
1436 | case TTM_PL_TT: | ||
1437 | amdgpu_gtt_mgr_print(m, &adev->mman.bdev.man[TTM_PL_TT]); | ||
1438 | break; | ||
1439 | } | ||
1422 | return 0; | 1440 | return 0; |
1423 | } | 1441 | } |
1424 | 1442 | ||