Lines Matching refs:restore

450 static bool ttm_pool_restore_valid(const struct ttm_pool_tt_restore *restore)  in ttm_pool_restore_valid()  argument
452 return restore && restore->restored_pages < (1 << restore->order); in ttm_pool_restore_valid()
509 static int ttm_pool_restore_commit(struct ttm_pool_tt_restore *restore, in ttm_pool_restore_commit() argument
515 pgoff_t i, nr = 1UL << restore->order; in ttm_pool_restore_commit()
520 for (i = restore->restored_pages; i < nr; ++i) { in ttm_pool_restore_commit()
532 restore->restored_pages++; in ttm_pool_restore_commit()
536 ret = ttm_backup_copy_page(backup, restore->alloced_page + i, in ttm_pool_restore_commit()
550 ttm_pool_split_for_swap(restore->pool, p); in ttm_pool_restore_commit()
551 copy_highpage(restore->alloced_page + i, p); in ttm_pool_restore_commit()
555 restore->restored_pages++; in ttm_pool_restore_commit()
560 if (!restore->restored_pages) { in ttm_pool_restore_commit()
561 dma_addr_t *dma_addr = alloc->dma_addr ? &restore->first_dma : NULL; in ttm_pool_restore_commit()
563 ttm_pool_unmap_and_free(restore->pool, restore->alloced_page, in ttm_pool_restore_commit()
564 dma_addr, restore->page_caching); in ttm_pool_restore_commit()
565 restore->restored_pages = nr; in ttm_pool_restore_commit()
570 ttm_pool_allocated_page_commit(restore->alloced_page, restore->first_dma, in ttm_pool_restore_commit()
572 if (restore->page_caching == alloc->tt_caching || PageHighMem(restore->alloced_page)) in ttm_pool_restore_commit()
574 restore->snapshot_alloc = *alloc; in ttm_pool_restore_commit()
575 restore->alloced_pages += nr; in ttm_pool_restore_commit()
586 struct ttm_pool_tt_restore *restore, in ttm_pool_page_allocated_restore() argument
589 restore->pool = pool; in ttm_pool_page_allocated_restore()
590 restore->order = order; in ttm_pool_page_allocated_restore()
591 restore->restored_pages = 0; in ttm_pool_page_allocated_restore()
592 restore->page_caching = page_caching; in ttm_pool_page_allocated_restore()
593 restore->first_dma = first_dma; in ttm_pool_page_allocated_restore()
594 restore->alloced_page = p; in ttm_pool_page_allocated_restore()
595 restore->snapshot_alloc = *alloc; in ttm_pool_page_allocated_restore()
608 struct ttm_pool_tt_restore *restore) in ttm_pool_page_allocated() argument
628 if (restore) { in ttm_pool_page_allocated()
630 first_dma, restore, alloc); in ttm_pool_page_allocated()
703 struct ttm_pool_tt_restore *restore) in __ttm_pool_alloc() argument
762 restore); in __ttm_pool_alloc()
766 if (ttm_pool_restore_valid(restore)) { 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()
844 if (!tt->restore) { 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() local
862 alloc = restore->snapshot_alloc; 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()
901 struct ttm_pool_tt_restore *restore; in ttm_pool_drop_backed_up() local
906 restore = tt->restore; in ttm_pool_drop_backed_up()
913 if (ttm_pool_restore_valid(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()
916 ttm_pool_unmap_and_free(restore->pool, restore->alloced_page, in ttm_pool_drop_backed_up()
917 dma_addr, restore->page_caching); in ttm_pool_drop_backed_up()
918 restore->restored_pages = 1UL << restore->order; in ttm_pool_drop_backed_up()
925 if (restore) { in ttm_pool_drop_backed_up()
926 pgoff_t mid = restore->snapshot_alloc.caching_divide - tt->pages; in ttm_pool_drop_backed_up()
928 start_page = restore->alloced_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()
935 mid, restore->alloced_pages); in ttm_pool_drop_backed_up()
936 kfree(restore); in ttm_pool_drop_backed_up()
937 tt->restore = NULL; in ttm_pool_drop_backed_up()