aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/ttm/ttm_tt.c
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/ttm/ttm_tt.c
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/ttm/ttm_tt.c')
-rw-r--r--drivers/gpu/drm/ttm/ttm_tt.c105
1 files changed, 1 insertions, 104 deletions
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,