static struct page *__ttm_tt_get_page(struct ttm_tt *ttm, int index) { struct page *p; struct list_head h; struct ttm_mem_global *mem_glob = ttm->glob->mem_glob; int ret; while (NULL == (p = ttm->pages[index])) { INIT_LIST_HEAD(&h); ret = ttm_get_pages(&h, ttm->page_flags, ttm->caching_state, 1); if (ret != 0) return NULL; p = list_first_entry(&h, struct page, lru); ret = ttm_mem_global_alloc_page(mem_glob, p, false, false); if (unlikely(ret != 0)) goto out_err; if (PageHighMem(p)) ttm->pages[--ttm->first_himem_page] = p; else ttm->pages[++ttm->last_lomem_page] = p; } return p; out_err: put_page(p); return NULL; }
static struct page *__ttm_tt_get_page(struct ttm_tt *ttm, int index) { struct page *p; struct ttm_mem_global *mem_glob = ttm->glob->mem_glob; int ret; while (NULL == (p = ttm->pages[index])) { p = ttm_tt_alloc_page(ttm->page_flags); if (!p) return NULL; ret = ttm_mem_global_alloc_page(mem_glob, p, false, false); if (unlikely(ret != 0)) goto out_err; if (PageHighMem(p)) ttm->pages[--ttm->first_himem_page] = p; else ttm->pages[++ttm->last_lomem_page] = p; } return p; out_err: put_page(p); return NULL; }