Lines Matching refs:tt
654 static void ttm_pool_free_range(struct ttm_pool *pool, struct ttm_tt *tt, in ttm_pool_free_range() argument
658 struct page **pages = &tt->pages[start_page]; in ttm_pool_free_range()
659 struct file *backup = tt->backup; in ttm_pool_free_range()
672 dma_addr_t *dma_addr = tt->dma_address ? in ttm_pool_free_range()
673 tt->dma_address + i : NULL; in ttm_pool_free_range()
680 static void ttm_pool_alloc_state_init(const struct ttm_tt *tt, in ttm_pool_alloc_state_init() argument
683 alloc->pages = tt->pages; in ttm_pool_alloc_state_init()
684 alloc->caching_divide = tt->pages; in ttm_pool_alloc_state_init()
685 alloc->dma_addr = tt->dma_address; in ttm_pool_alloc_state_init()
686 alloc->remaining_pages = tt->num_pages; in ttm_pool_alloc_state_init()
687 alloc->tt_caching = tt->caching; in ttm_pool_alloc_state_init()
700 static int __ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt, in __ttm_pool_alloc() argument
713 WARN_ON(!alloc->remaining_pages || ttm_tt_is_populated(tt)); in __ttm_pool_alloc()
716 if (tt->page_flags & TTM_TT_FLAG_ZERO_ALLOC) in __ttm_pool_alloc()
727 page_caching = tt->caching; in __ttm_pool_alloc()
754 page_caching = tt->caching; in __ttm_pool_alloc()
767 r = ttm_pool_restore_commit(restore, tt->backup, ctx, alloc); in __ttm_pool_alloc()
777 kfree(tt->restore); in __ttm_pool_alloc()
778 tt->restore = NULL; in __ttm_pool_alloc()
786 if (tt->restore) in __ttm_pool_alloc()
789 caching_divide = alloc->caching_divide - tt->pages; in __ttm_pool_alloc()
790 ttm_pool_free_range(pool, tt, tt->caching, 0, caching_divide); in __ttm_pool_alloc()
791 ttm_pool_free_range(pool, tt, ttm_cached, caching_divide, in __ttm_pool_alloc()
792 tt->num_pages - alloc->remaining_pages); in __ttm_pool_alloc()
809 int ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt, in ttm_pool_alloc() argument
814 if (WARN_ON(ttm_tt_is_backed_up(tt))) in ttm_pool_alloc()
817 ttm_pool_alloc_state_init(tt, &alloc); in ttm_pool_alloc()
819 return __ttm_pool_alloc(pool, tt, ctx, &alloc, NULL); in ttm_pool_alloc()
836 int ttm_pool_restore_and_alloc(struct ttm_pool *pool, struct ttm_tt *tt, in ttm_pool_restore_and_alloc() argument
841 if (WARN_ON(!ttm_tt_is_backed_up(tt))) in ttm_pool_restore_and_alloc()
844 if (!tt->restore) { in ttm_pool_restore_and_alloc()
847 ttm_pool_alloc_state_init(tt, &alloc); in ttm_pool_restore_and_alloc()
851 tt->restore = kzalloc(sizeof(*tt->restore), gfp); in ttm_pool_restore_and_alloc()
852 if (!tt->restore) in ttm_pool_restore_and_alloc()
855 tt->restore->snapshot_alloc = alloc; in ttm_pool_restore_and_alloc()
856 tt->restore->pool = pool; in ttm_pool_restore_and_alloc()
857 tt->restore->restored_pages = 1; in ttm_pool_restore_and_alloc()
859 struct ttm_pool_tt_restore *restore = tt->restore; in ttm_pool_restore_and_alloc()
863 if (ttm_pool_restore_valid(tt->restore)) { in ttm_pool_restore_and_alloc()
864 ret = ttm_pool_restore_commit(restore, tt->backup, ctx, &alloc); in ttm_pool_restore_and_alloc()
872 return __ttm_pool_alloc(pool, tt, ctx, &alloc, tt->restore); in ttm_pool_restore_and_alloc()
883 void ttm_pool_free(struct ttm_pool *pool, struct ttm_tt *tt) in ttm_pool_free() argument
885 ttm_pool_free_range(pool, tt, tt->caching, 0, tt->num_pages); in ttm_pool_free()
899 void ttm_pool_drop_backed_up(struct ttm_tt *tt) in ttm_pool_drop_backed_up() argument
904 WARN_ON(!ttm_tt_is_backed_up(tt)); in ttm_pool_drop_backed_up()
906 restore = tt->restore; in ttm_pool_drop_backed_up()
914 dma_addr_t *dma_addr = tt->dma_address ? &restore->first_dma : NULL; in ttm_pool_drop_backed_up()
926 pgoff_t mid = restore->snapshot_alloc.caching_divide - tt->pages; in ttm_pool_drop_backed_up()
931 ttm_pool_free_range(restore->pool, tt, tt->caching, in ttm_pool_drop_backed_up()
934 ttm_pool_free_range(restore->pool, tt, ttm_cached, in ttm_pool_drop_backed_up()
937 tt->restore = NULL; in ttm_pool_drop_backed_up()
940 ttm_pool_free_range(NULL, tt, ttm_cached, start_page, tt->num_pages); in ttm_pool_drop_backed_up()
964 long ttm_pool_backup(struct ttm_pool *pool, struct ttm_tt *tt, in ttm_pool_backup() argument
967 struct file *backup = tt->backup; in ttm_pool_backup()
976 if (WARN_ON(ttm_tt_is_backed_up(tt))) in ttm_pool_backup()
980 pool->use_dma_alloc || ttm_tt_is_backed_up(tt)) in ttm_pool_backup()
985 if (tt->caching != ttm_cached) in ttm_pool_backup()
986 set_pages_array_wb(tt->pages, tt->num_pages); in ttm_pool_backup()
989 if (tt->dma_address || flags->purge) { in ttm_pool_backup()
990 for (i = 0; i < tt->num_pages; i += num_pages) { in ttm_pool_backup()
993 page = tt->pages[i]; in ttm_pool_backup()
1001 if (tt->dma_address) in ttm_pool_backup()
1002 ttm_pool_unmap(pool, tt->dma_address[i], in ttm_pool_backup()
1008 memset(tt->pages + i, 0, in ttm_pool_backup()
1009 num_pages * sizeof(*tt->pages)); in ttm_pool_backup()
1024 num_pages = tt->num_pages; in ttm_pool_backup()
1033 page = tt->pages[i]; in ttm_pool_backup()
1047 tt->pages[i] = ttm_backup_handle_to_page_ptr(handle); in ttm_pool_backup()