static void free_buffer_page(struct ion_system_heap *heap, struct ion_buffer *buffer, struct page *page, unsigned int order) { bool cached = ion_buffer_cached(buffer); bool split_pages = ion_buffer_fault_user_mappings(buffer); int i; if ((buffer->flags & ION_FLAG_FREED_FROM_SHRINKER)) { ion_alloc_dec_usage(ION_TOTAL, 1 << order); if (split_pages) { for (i = 0; i < (1 << order); i++) __free_page(page + i); } else { __free_pages(page, order); } } else { struct ion_page_pool *pool; if (cached) pool = heap->cached_pools[order_to_index(order)]; else pool = heap->uncached_pools[order_to_index(order)]; ion_page_pool_free(pool, page); } }
static void free_buffer_page(struct ion_system_heap *heap, struct ion_buffer *buffer, struct page *page, unsigned int order) { bool cached = ion_buffer_cached(buffer); if (!cached && !(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE)) { struct ion_page_pool *pool = heap->pools[order_to_index(order)]; ion_page_pool_free(pool, page); } else { __free_pages(page, order); } }