/* SPDX-License-Identifier: GPL-2.0 */ /* * ION Page Pool kernel interface header * * Copyright (C) 2011 Google, Inc. */ #ifndef _ION_PAGE_POOL_H #define _ION_PAGE_POOL_H #include #include #include #include /** * functions for creating and destroying a heap pool -- allows you * to keep a pool of pre allocated memory to use from your heap. Keeping * a pool of memory that is ready for dma, ie any cached mapping have been * invalidated from the cache, provides a significant performance benefit on * many systems */ /** * struct ion_page_pool - pagepool struct * @high_count: number of highmem items in the pool * @low_count: number of lowmem items in the pool * @high_items: list of highmem items * @low_items: list of lowmem items * @mutex: lock protecting this struct and especially the count * item list * @gfp_mask: gfp_mask to use from alloc * @order: order of pages in the pool * @list: plist node for list of pools * * Allows you to keep a pool of pre allocated pages to use from your heap. * Keeping a pool of pages that is ready for dma, ie any cached mapping have * been invalidated from the cache, provides a significant performance benefit * on many systems */ struct ion_page_pool { int high_count; int low_count; struct list_head high_items; struct list_head low_items; struct mutex mutex; gfp_t gfp_mask; unsigned int order; struct plist_node list; }; struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order); void ion_page_pool_destroy(struct ion_page_pool *pool); struct page *ion_page_pool_alloc(struct ion_page_pool *pool); void ion_page_pool_free(struct ion_page_pool *pool, struct page *page); int ion_page_pool_nr_pages(struct ion_page_pool *pool); /** ion_page_pool_shrink - shrinks the size of the memory cached in the pool * @pool: the pool * @gfp_mask: the memory type to reclaim * @nr_to_scan: number of items to shrink in pages * * returns the number of items freed in pages */ int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask, int nr_to_scan); #endif /* _ION_PAGE_POOL_H */