aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2011-11-01 15:45:57 -0400
committerDave Airlie <airlied@redhat.com>2011-12-06 05:38:10 -0500
commit3316497bcd73dcad971d79bed32571ed785a8c01 (patch)
treef5b35d24df66b379110b51d5c5b975d4dfbcfbe7 /drivers/gpu/drm
parentf21ffe9f6da6d3a69c518b7345c198d48d941c34 (diff)
drm/ttm: remove userspace backed ttm object support
This was never use in none of the driver, properly using userspace page for bo would need more code (vma interaction mostly). Removing this dead code in preparation of ttm_tt & backend merge. Signed-off-by: Jerome Glisse <jglisse@redhat.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/ttm/ttm_bo.c22
-rw-r--r--drivers/gpu/drm/ttm/ttm_tt.c105
2 files changed, 1 insertions, 126 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 617b64678fc6..4bde3356ecb2 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -342,22 +342,6 @@ static int ttm_bo_add_ttm(struct ttm_buffer_object *bo, bool zero_alloc)
342 if (unlikely(bo->ttm == NULL)) 342 if (unlikely(bo->ttm == NULL))
343 ret = -ENOMEM; 343 ret = -ENOMEM;
344 break; 344 break;
345 case ttm_bo_type_user:
346 bo->ttm = ttm_tt_create(bdev, bo->num_pages << PAGE_SHIFT,
347 page_flags | TTM_PAGE_FLAG_USER,
348 glob->dummy_read_page);
349 if (unlikely(bo->ttm == NULL)) {
350 ret = -ENOMEM;
351 break;
352 }
353
354 ret = ttm_tt_set_user(bo->ttm, current,
355 bo->buffer_start, bo->num_pages);
356 if (unlikely(ret != 0)) {
357 ttm_tt_destroy(bo->ttm);
358 bo->ttm = NULL;
359 }
360 break;
361 default: 345 default:
362 printk(KERN_ERR TTM_PFX "Illegal buffer object type\n"); 346 printk(KERN_ERR TTM_PFX "Illegal buffer object type\n");
363 ret = -EINVAL; 347 ret = -EINVAL;
@@ -907,16 +891,12 @@ static uint32_t ttm_bo_select_caching(struct ttm_mem_type_manager *man,
907} 891}
908 892
909static bool ttm_bo_mt_compatible(struct ttm_mem_type_manager *man, 893static bool ttm_bo_mt_compatible(struct ttm_mem_type_manager *man,
910 bool disallow_fixed,
911 uint32_t mem_type, 894 uint32_t mem_type,
912 uint32_t proposed_placement, 895 uint32_t proposed_placement,
913 uint32_t *masked_placement) 896 uint32_t *masked_placement)
914{ 897{
915 uint32_t cur_flags = ttm_bo_type_flags(mem_type); 898 uint32_t cur_flags = ttm_bo_type_flags(mem_type);
916 899
917 if ((man->flags & TTM_MEMTYPE_FLAG_FIXED) && disallow_fixed)
918 return false;
919
920 if ((cur_flags & proposed_placement & TTM_PL_MASK_MEM) == 0) 900 if ((cur_flags & proposed_placement & TTM_PL_MASK_MEM) == 0)
921 return false; 901 return false;
922 902
@@ -961,7 +941,6 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
961 man = &bdev->man[mem_type]; 941 man = &bdev->man[mem_type];
962 942
963 type_ok = ttm_bo_mt_compatible(man, 943 type_ok = ttm_bo_mt_compatible(man,
964 bo->type == ttm_bo_type_user,
965 mem_type, 944 mem_type,
966 placement->placement[i], 945 placement->placement[i],
967 &cur_flags); 946 &cur_flags);
@@ -1009,7 +988,6 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
1009 if (!man->has_type) 988 if (!man->has_type)
1010 continue; 989 continue;
1011 if (!ttm_bo_mt_compatible(man, 990 if (!ttm_bo_mt_compatible(man,
1012 bo->type == ttm_bo_type_user,
1013 mem_type, 991 mem_type,
1014 placement->busy_placement[i], 992 placement->busy_placement[i],
1015 &cur_flags)) 993 &cur_flags))
diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
index f9cc548d6d98..c68b0e770d16 100644
--- a/drivers/gpu/drm/ttm/ttm_tt.c
+++ b/drivers/gpu/drm/ttm/ttm_tt.c
@@ -63,43 +63,6 @@ static void ttm_tt_free_page_directory(struct ttm_tt *ttm)
63 ttm->dma_address = NULL; 63 ttm->dma_address = NULL;
64} 64}
65 65
66static void ttm_tt_free_user_pages(struct ttm_tt *ttm)
67{
68 int write;
69 int dirty;
70 struct page *page;
71 int i;
72 struct ttm_backend *be = ttm->be;
73
74 BUG_ON(!(ttm->page_flags & TTM_PAGE_FLAG_USER));
75 write = ((ttm->page_flags & TTM_PAGE_FLAG_WRITE) != 0);
76 dirty = ((ttm->page_flags & TTM_PAGE_FLAG_USER_DIRTY) != 0);
77
78 if (be)
79 be->func->clear(be);
80
81 for (i = 0; i < ttm->num_pages; ++i) {
82 page = ttm->pages[i];
83 if (page == NULL)
84 continue;
85
86 if (page == ttm->dummy_read_page) {
87 BUG_ON(write);
88 continue;
89 }
90
91 if (write && dirty && !PageReserved(page))
92 set_page_dirty_lock(page);
93
94 ttm->pages[i] = NULL;
95 ttm_mem_global_free(ttm->glob->mem_glob, PAGE_SIZE);
96 put_page(page);
97 }
98 ttm->state = tt_unpopulated;
99 ttm->first_himem_page = ttm->num_pages;
100 ttm->last_lomem_page = -1;
101}
102
103static struct page *__ttm_tt_get_page(struct ttm_tt *ttm, int index) 66static struct page *__ttm_tt_get_page(struct ttm_tt *ttm, int index)
104{ 67{
105 struct page *p; 68 struct page *p;
@@ -326,10 +289,7 @@ void ttm_tt_destroy(struct ttm_tt *ttm)
326 } 289 }
327 290
328 if (likely(ttm->pages != NULL)) { 291 if (likely(ttm->pages != NULL)) {
329 if (ttm->page_flags & TTM_PAGE_FLAG_USER) 292 ttm_tt_free_alloced_pages(ttm);
330 ttm_tt_free_user_pages(ttm);
331 else
332 ttm_tt_free_alloced_pages(ttm);
333 293
334 ttm_tt_free_page_directory(ttm); 294 ttm_tt_free_page_directory(ttm);
335 } 295 }
@@ -341,45 +301,6 @@ void ttm_tt_destroy(struct ttm_tt *ttm)
341 kfree(ttm); 301 kfree(ttm);
342} 302}
343 303
344int ttm_tt_set_user(struct ttm_tt *ttm,
345 struct task_struct *tsk,
346 unsigned long start, unsigned long num_pages)
347{
348 struct mm_struct *mm = tsk->mm;
349 int ret;
350 int write = (ttm->page_flags & TTM_PAGE_FLAG_WRITE) != 0;
351 struct ttm_mem_global *mem_glob = ttm->glob->mem_glob;
352
353 BUG_ON(num_pages != ttm->num_pages);
354 BUG_ON((ttm->page_flags & TTM_PAGE_FLAG_USER) == 0);
355
356 /**
357 * Account user pages as lowmem pages for now.
358 */
359
360 ret = ttm_mem_global_alloc(mem_glob, num_pages * PAGE_SIZE,
361 false, false);
362 if (unlikely(ret != 0))
363 return ret;
364
365 down_read(&mm->mmap_sem);
366 ret = get_user_pages(tsk, mm, start, num_pages,
367 write, 0, ttm->pages, NULL);
368 up_read(&mm->mmap_sem);
369
370 if (ret != num_pages && write) {
371 ttm_tt_free_user_pages(ttm);
372 ttm_mem_global_free(mem_glob, num_pages * PAGE_SIZE);
373 return -ENOMEM;
374 }
375
376 ttm->tsk = tsk;
377 ttm->start = start;
378 ttm->state = tt_unbound;
379
380 return 0;
381}
382
383struct ttm_tt *ttm_tt_create(struct ttm_bo_device *bdev, unsigned long size, 304struct ttm_tt *ttm_tt_create(struct ttm_bo_device *bdev, unsigned long size,
384 uint32_t page_flags, struct page *dummy_read_page) 305 uint32_t page_flags, struct page *dummy_read_page)
385{ 306{
@@ -453,8 +374,6 @@ int ttm_tt_bind(struct ttm_tt *ttm, struct ttm_mem_reg *bo_mem)
453 374
454 ttm->state = tt_bound; 375 ttm->state = tt_bound;
455 376
456 if (ttm->page_flags & TTM_PAGE_FLAG_USER)
457 ttm->page_flags |= TTM_PAGE_FLAG_USER_DIRTY;
458 return 0; 377 return 0;
459} 378}
460EXPORT_SYMBOL(ttm_tt_bind); 379EXPORT_SYMBOL(ttm_tt_bind);
@@ -470,16 +389,6 @@ static int ttm_tt_swapin(struct ttm_tt *ttm)
470 int i; 389 int i;
471 int ret = -ENOMEM; 390 int ret = -ENOMEM;
472 391
473 if (ttm->page_flags & TTM_PAGE_FLAG_USER) {
474 ret = ttm_tt_set_user(ttm, ttm->tsk, ttm->start,
475 ttm->num_pages);
476 if (unlikely(ret != 0))
477 return ret;
478
479 ttm->page_flags &= ~TTM_PAGE_FLAG_SWAPPED;
480 return 0;
481 }
482
483 swap_storage = ttm->swap_storage; 392 swap_storage = ttm->swap_storage;
484 BUG_ON(swap_storage == NULL); 393 BUG_ON(swap_storage == NULL);
485 394
@@ -530,18 +439,6 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistent_swap_storage)
530 BUG_ON(ttm->state != tt_unbound && ttm->state != tt_unpopulated); 439 BUG_ON(ttm->state != tt_unbound && ttm->state != tt_unpopulated);
531 BUG_ON(ttm->caching_state != tt_cached); 440 BUG_ON(ttm->caching_state != tt_cached);
532 441
533 /*
534 * For user buffers, just unpin the pages, as there should be
535 * vma references.
536 */
537
538 if (ttm->page_flags & TTM_PAGE_FLAG_USER) {
539 ttm_tt_free_user_pages(ttm);
540 ttm->page_flags |= TTM_PAGE_FLAG_SWAPPED;
541 ttm->swap_storage = NULL;
542 return 0;
543 }
544
545 if (!persistent_swap_storage) { 442 if (!persistent_swap_storage) {
546 swap_storage = shmem_file_setup("ttm swap", 443 swap_storage = shmem_file_setup("ttm swap",
547 ttm->num_pages << PAGE_SHIFT, 444 ttm->num_pages << PAGE_SHIFT,