Lines Matching defs:ttm
37 #define pr_fmt(fmt) "[TTM] " fmt
45 #include <drm/ttm/ttm_bo_driver.h>
46 #include <drm/ttm/ttm_page_alloc.h>
48 #include <drm/ttm/ttm_set_memory.h>
51 * Allocates a ttm structure for the given BO.
77 bo->ttm = NULL;
82 bo->ttm = bdev->driver->ttm_tt_create(bo, page_flags);
83 if (unlikely(bo->ttm == NULL))
90 * Allocates storage for pointers to the pages that back the ttm.
92 static int ttm_tt_alloc_page_directory(struct ttm_tt *ttm)
94 ttm->pages = kvmalloc_array(ttm->num_pages, sizeof(void*),
96 if (!ttm->pages)
103 static int ttm_dma_tt_alloc_page_directory(struct ttm_dma_tt *ttm)
108 /* Create array of pages at ttm->ttm.pages. */
109 r = ttm_tt_alloc_page_directory(&ttm->ttm);
113 /* Create bus DMA map at ttm->dma_address. */
114 r = ttm_sg_tt_alloc_page_directory(ttm);
116 kvfree(ttm->ttm.pages);
117 ttm->ttm.pages = NULL;
124 ttm->ttm.pages = kvmalloc_array(ttm->ttm.num_pages,
125 sizeof(*ttm->ttm.pages) +
126 sizeof(*ttm->dma_address),
128 if (!ttm->ttm.pages)
130 ttm->dma_address = (void *) (ttm->ttm.pages + ttm->ttm.num_pages);
135 static int ttm_sg_tt_alloc_page_directory(struct ttm_dma_tt *ttm)
138 ttm->dma_address = NULL;
140 return -bus_dmamap_create(ttm->ttm.bdev->dmat,
141 ttm->ttm.num_pages << PAGE_SHIFT, ttm->ttm.num_pages, PAGE_SIZE, 0,
142 BUS_DMA_WAITOK, &ttm->dma_address);
144 ttm->dma_address = kvmalloc_array(ttm->ttm.num_pages,
145 sizeof(*ttm->dma_address),
147 if (!ttm->dma_address)
185 * for range of pages in a ttm.
188 static int ttm_tt_set_caching(struct ttm_tt *ttm,
195 if (ttm->caching_state == c_state)
198 if (ttm->state == tt_unpopulated) {
200 ttm->caching_state = c_state;
204 if (ttm->caching_state == tt_cached)
205 drm_clflush_pages(ttm->pages, ttm->num_pages);
207 for (i = 0; i < ttm->num_pages; ++i) {
208 cur_page = ttm->pages[i];
211 ttm->caching_state,
218 ttm->caching_state = c_state;
224 cur_page = ttm->pages[j];
227 ttm->caching_state);
234 int ttm_tt_set_placement_caching(struct ttm_tt *ttm, uint32_t placement)
245 return ttm_tt_set_caching(ttm, state);
249 void ttm_tt_destroy(struct ttm_tt *ttm)
251 if (ttm == NULL)
254 ttm_tt_unbind(ttm);
256 if (ttm->state == tt_unbound)
257 ttm_tt_unpopulate(ttm);
260 if (!(ttm->page_flags & TTM_PAGE_FLAG_PERSISTENT_SWAP) &&
261 ttm->swap_storage)
262 fput(ttm->swap_storage);
264 ttm->swap_storage = NULL;
266 ttm->func->destroy(ttm);
269 static void ttm_tt_init_fields(struct ttm_tt *ttm,
273 ttm->bdev = bo->bdev;
274 ttm->num_pages = bo->num_pages;
275 ttm->caching_state = tt_cached;
276 ttm->page_flags = page_flags;
277 ttm->state = tt_unpopulated;
282 ttm->swap_storage = uao_create(PAGE_SIZE * MAX(1, bo->num_pages), 0);
283 uao_set_pgfl(ttm->swap_storage, bus_dmamem_pgfl(ttm->bdev->dmat));
285 ttm->swap_storage = NULL;
287 ttm->sg = bo->sg;
290 int ttm_tt_init(struct ttm_tt *ttm, struct ttm_buffer_object *bo,
293 ttm_tt_init_fields(ttm, bo, page_flags);
295 if (ttm_tt_alloc_page_directory(ttm)) {
296 ttm_tt_destroy(ttm);
304 void ttm_tt_fini(struct ttm_tt *ttm)
306 kvfree(ttm->pages);
307 ttm->pages = NULL;
309 uao_detach(ttm->swap_storage);
310 ttm->swap_storage = NULL;
318 struct ttm_tt *ttm = &ttm_dma->ttm;
320 ttm_tt_init_fields(ttm, bo, page_flags);
324 ttm_tt_destroy(ttm);
335 struct ttm_tt *ttm = &ttm_dma->ttm;
338 ttm_tt_init_fields(ttm, bo, page_flags);
346 ttm_tt_destroy(ttm);
356 struct ttm_tt *ttm = &ttm_dma->ttm;
360 bus_dmamap_destroy(ttm->bdev->dmat, ttm_dma->dma_address);
363 ttm_tt_fini(ttm);
365 if (ttm->pages)
366 kvfree(ttm->pages);
369 ttm->pages = NULL;
375 void ttm_tt_unbind(struct ttm_tt *ttm)
379 if (ttm->state == tt_bound) {
380 ret = ttm->func->unbind(ttm);
382 ttm->state = tt_unbound;
386 int ttm_tt_bind(struct ttm_tt *ttm, struct ttm_mem_reg *bo_mem,
391 if (!ttm)
394 if (ttm->state == tt_bound)
397 ret = ttm_tt_populate(ttm, ctx);
401 ret = ttm->func->bind(ttm, bo_mem);
405 ttm->state = tt_bound;
413 * ttm_tt_wire(ttm)
415 * Wire the uvm pages of ttm and fill the ttm page array. ttm
421 ttm_tt_wire(struct ttm_tt *ttm)
423 struct uvm_object *uobj = ttm->swap_storage;
428 KASSERTMSG((ttm->state == tt_unpopulated),
430 ttm, (int)ttm->state);
431 KASSERT(ISSET(ttm->page_flags, TTM_PAGE_FLAG_SWAPPED));
434 error = uvm_obj_wirepages(uobj, 0, (ttm->num_pages << PAGE_SHIFT),
441 for (i = 0; i < ttm->num_pages; i++) {
443 ttm->pages[i] = container_of(vm_page, struct page, p_vmp);
452 * ttm_tt_unwire(ttm)
454 * Nullify the ttm page array and unwire the uvm pages of ttm.
455 * ttm must be unbound and must be marked swapped. This does not
460 ttm_tt_unwire(struct ttm_tt *ttm)
462 struct uvm_object *uobj = ttm->swap_storage;
465 KASSERTMSG((ttm->state == tt_unbound),
467 ttm, (int)ttm->state);
468 KASSERT(!ISSET(ttm->page_flags, TTM_PAGE_FLAG_SWAPPED));
471 uvm_obj_unwirepages(uobj, 0, (ttm->num_pages << PAGE_SHIFT));
472 for (i = 0; i < ttm->num_pages; i++)
473 ttm->pages[i] = NULL;
478 int ttm_tt_swapin(struct ttm_tt *ttm)
487 swap_storage = ttm->swap_storage;
492 for (i = 0; i < ttm->num_pages; ++i) {
495 gfp_mask |= (ttm->page_flags & TTM_PAGE_FLAG_NO_RETRY ? __GFP_RETRY_MAYFAIL : 0);
502 to_page = ttm->pages[i];
510 if (!(ttm->page_flags & TTM_PAGE_FLAG_PERSISTENT_SWAP))
512 ttm->swap_storage = NULL;
513 ttm->page_flags &= ~TTM_PAGE_FLAG_SWAPPED;
521 int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistent_swap_storage)
525 KASSERTMSG((ttm->state == tt_unpopulated || ttm->state == tt_unbound),
528 ttm, (int)ttm->state);
529 KASSERTMSG((ttm->caching_state == tt_cached),
531 ttm, (int)ttm->caching_state);
534 ttm->bdev->driver->ttm_tt_swapout(ttm);
544 BUG_ON(ttm->state != tt_unbound && ttm->state != tt_unpopulated);
545 BUG_ON(ttm->caching_state != tt_cached);
548 swap_storage = shmem_file_setup("ttm swap",
549 ttm->num_pages << PAGE_SHIFT,
561 for (i = 0; i < ttm->num_pages; ++i) {
564 gfp_mask |= (ttm->page_flags & TTM_PAGE_FLAG_NO_RETRY ? __GFP_RETRY_MAYFAIL : 0);
566 from_page = ttm->pages[i];
581 ttm_tt_unpopulate(ttm);
582 ttm->swap_storage = swap_storage;
583 ttm->page_flags |= TTM_PAGE_FLAG_SWAPPED;
585 ttm->page_flags |= TTM_PAGE_FLAG_PERSISTENT_SWAP;
596 static void ttm_tt_add_mapping(struct ttm_tt *ttm)
601 if (ttm->page_flags & TTM_PAGE_FLAG_SG)
604 for (i = 0; i < ttm->num_pages; ++i)
605 ttm->pages[i]->mapping = ttm->bdev->dev_mapping;
609 int ttm_tt_populate(struct ttm_tt *ttm, struct ttm_operation_ctx *ctx)
613 if (ttm->state != tt_unpopulated)
616 if (ttm->bdev->driver->ttm_tt_populate)
617 ret = ttm->bdev->driver->ttm_tt_populate(ttm, ctx);
620 panic("no ttm population");
622 ret = ttm_pool_populate(ttm, ctx);
625 ttm_tt_add_mapping(ttm);
629 static void ttm_tt_clear_mapping(struct ttm_tt *ttm)
633 struct page **page = ttm->pages;
635 if (ttm->page_flags & TTM_PAGE_FLAG_SG)
638 for (i = 0; i < ttm->num_pages; ++i) {
645 void ttm_tt_unpopulate(struct ttm_tt *ttm)
647 if (ttm->state == tt_unpopulated)
650 ttm_tt_clear_mapping(ttm);
651 if (ttm->bdev->driver->ttm_tt_unpopulate)
652 ttm->bdev->driver->ttm_tt_unpopulate(ttm);
655 panic("no ttm pool unpopulation");
657 ttm_pool_unpopulate(ttm);