static struct page *alloc_buffer_page(struct ion_system_heap *heap, struct ion_buffer *buffer, unsigned long order, bool *from_pool) { bool cached = ion_buffer_cached(buffer); bool split_pages = ion_buffer_fault_user_mappings(buffer); struct page *page; struct ion_page_pool *pool; if (!cached) pool = heap->uncached_pools[order_to_index(order)]; else pool = heap->cached_pools[order_to_index(order)]; page = ion_page_pool_alloc(pool, from_pool); if (!page) return 0; if (split_pages) split_page(page, order); return page; }
static struct page *alloc_buffer_page(struct ion_system_heap *heap, struct ion_buffer *buffer, unsigned long order) { bool cached = ion_buffer_cached(buffer); struct ion_page_pool *pool = heap->pools[order_to_index(order)]; struct page *page; if (!cached) { page = ion_page_pool_alloc(pool); } else { gfp_t gfp_flags = low_order_gfp_flags; if (order > 4) gfp_flags = high_order_gfp_flags; page = alloc_pages(gfp_flags, order); } if (!page) return NULL; return page; }