aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/ttm/ttm_page_alloc.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
index e11fd76e06f4..482dd9aa2c84 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -873,15 +873,14 @@ int ttm_pool_populate(struct ttm_tt *ttm)
873 if (ttm->state != tt_unpopulated) 873 if (ttm->state != tt_unpopulated)
874 return 0; 874 return 0;
875 875
876 for (i = 0; i < ttm->num_pages; ++i) { 876 ret = ttm_get_pages(ttm->pages, ttm->num_pages, ttm->page_flags,
877 ret = ttm_get_pages(&ttm->pages[i], 1, 877 ttm->caching_state);
878 ttm->page_flags, 878 if (unlikely(ret != 0)) {
879 ttm->caching_state); 879 ttm_pool_unpopulate(ttm);
880 if (ret != 0) { 880 return ret;
881 ttm_pool_unpopulate(ttm); 881 }
882 return -ENOMEM;
883 }
884 882
883 for (i = 0; i < ttm->num_pages; ++i) {
885 ret = ttm_mem_global_alloc_page(mem_glob, ttm->pages[i], 884 ret = ttm_mem_global_alloc_page(mem_glob, ttm->pages[i],
886 PAGE_SIZE); 885 PAGE_SIZE);
887 if (unlikely(ret != 0)) { 886 if (unlikely(ret != 0)) {
@@ -908,14 +907,14 @@ void ttm_pool_unpopulate(struct ttm_tt *ttm)
908 unsigned i; 907 unsigned i;
909 908
910 for (i = 0; i < ttm->num_pages; ++i) { 909 for (i = 0; i < ttm->num_pages; ++i) {
911 if (ttm->pages[i]) { 910 if (!ttm->pages[i])
912 ttm_mem_global_free_page(ttm->glob->mem_glob, 911 continue;
913 ttm->pages[i], PAGE_SIZE); 912
914 ttm_put_pages(&ttm->pages[i], 1, 913 ttm_mem_global_free_page(ttm->glob->mem_glob, ttm->pages[i],
915 ttm->page_flags, 914 PAGE_SIZE);
916 ttm->caching_state);
917 }
918 } 915 }
916 ttm_put_pages(ttm->pages, ttm->num_pages, ttm->page_flags,
917 ttm->caching_state);
919 ttm->state = tt_unpopulated; 918 ttm->state = tt_unpopulated;
920} 919}
921EXPORT_SYMBOL(ttm_pool_unpopulate); 920EXPORT_SYMBOL(ttm_pool_unpopulate);