Loading drivers/staging/android/ion/ion_page_pool.c +10 −46 Original line number Diff line number Diff line Loading @@ -54,8 +54,7 @@ static void ion_page_pool_free_pages(struct ion_page_pool *pool, __free_pages(page, pool->order); } static int ion_page_pool_add(struct ion_page_pool *pool, struct page *page, bool prefetch) static int ion_page_pool_add(struct ion_page_pool *pool, struct page *page) { mutex_lock(&pool->mutex); if (PageHighMem(page)) { Loading @@ -65,15 +64,11 @@ static int ion_page_pool_add(struct ion_page_pool *pool, struct page *page, list_add_tail(&page->lru, &pool->low_items); pool->low_count++; } if (!prefetch) pool->nr_unreserved++; mutex_unlock(&pool->mutex); return 0; } static struct page *ion_page_pool_remove(struct ion_page_pool *pool, bool high, bool prefetch) static struct page *ion_page_pool_remove(struct ion_page_pool *pool, bool high) { struct page *page; Loading @@ -87,13 +82,6 @@ static struct page *ion_page_pool_remove(struct ion_page_pool *pool, bool high, pool->low_count--; } if (prefetch) { BUG_ON(!pool->nr_unreserved); pool->nr_unreserved--; } pool->nr_unreserved = min_t(int, pool->high_count + pool->low_count, pool->nr_unreserved); list_del(&page->lru); return page; } Loading @@ -108,9 +96,9 @@ void *ion_page_pool_alloc(struct ion_page_pool *pool, bool *from_pool) if (mutex_trylock(&pool->mutex)) { if (pool->high_count) page = ion_page_pool_remove(pool, true, false); page = ion_page_pool_remove(pool, true); else if (pool->low_count) page = ion_page_pool_remove(pool, false, false); page = ion_page_pool_remove(pool, false); mutex_unlock(&pool->mutex); } if (!page) { Loading @@ -120,27 +108,6 @@ void *ion_page_pool_alloc(struct ion_page_pool *pool, bool *from_pool) return page; } void *ion_page_pool_prefetch(struct ion_page_pool *pool, bool *from_pool) { struct page *page = NULL; BUG_ON(!pool); *from_pool = true; if (mutex_trylock(&pool->mutex)) { if (pool->high_count && pool->nr_unreserved > 0) page = ion_page_pool_remove(pool, true, true); else if (pool->low_count && pool->nr_unreserved > 0) page = ion_page_pool_remove(pool, false, true); mutex_unlock(&pool->mutex); } if (!page) { page = ion_page_pool_alloc_pages(pool); *from_pool = false; } return page; } /* * Tries to allocate from only the specified Pool and returns NULL otherwise */ Loading @@ -152,24 +119,22 @@ void *ion_page_pool_alloc_pool_only(struct ion_page_pool *pool) if (mutex_trylock(&pool->mutex)) { if (pool->high_count) page = ion_page_pool_remove(pool, true, false); page = ion_page_pool_remove(pool, true); else if (pool->low_count) page = ion_page_pool_remove(pool, false, false); page = ion_page_pool_remove(pool, false); mutex_unlock(&pool->mutex); } return page; } void ion_page_pool_free(struct ion_page_pool *pool, struct page *page, bool prefetch) void ion_page_pool_free(struct ion_page_pool *pool, struct page *page) { int ret; BUG_ON(pool->order != compound_order(page)); ret = ion_page_pool_add(pool, page, prefetch); /* FIXME? For a secure page, not hyp unassigned in this err path */ ret = ion_page_pool_add(pool, page); if (ret) ion_page_pool_free_pages(pool, page); } Loading Loading @@ -208,9 +173,9 @@ int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask, mutex_lock(&pool->mutex); if (pool->low_count) { page = ion_page_pool_remove(pool, false, false); page = ion_page_pool_remove(pool, false); } else if (high && pool->high_count) { page = ion_page_pool_remove(pool, true, false); page = ion_page_pool_remove(pool, true); } else { mutex_unlock(&pool->mutex); break; Loading @@ -233,7 +198,6 @@ struct ion_page_pool *ion_page_pool_create(struct device *dev, gfp_t gfp_mask, pool->dev = dev; pool->high_count = 0; pool->low_count = 0; pool->nr_unreserved = 0; INIT_LIST_HEAD(&pool->low_items); INIT_LIST_HEAD(&pool->high_items); pool->gfp_mask = gfp_mask | __GFP_COMP; Loading drivers/staging/android/ion/ion_priv.h +1 −5 Original line number Diff line number Diff line Loading @@ -415,8 +415,6 @@ void ion_carveout_free(struct ion_heap *heap, ion_phys_addr_t addr, * struct ion_page_pool - pagepool struct * @high_count: number of highmem items in the pool * @low_count: number of lowmem items in the pool * @nr_unreserved: number of items in the pool which have not been reserved * by a prefetch allocation * @high_items: list of highmem items * @low_items: list of lowmem items * @mutex: lock protecting this struct and especially the count Loading @@ -433,7 +431,6 @@ void ion_carveout_free(struct ion_heap *heap, ion_phys_addr_t addr, struct ion_page_pool { int high_count; int low_count; int nr_unreserved; struct list_head high_items; struct list_head low_items; struct mutex mutex; Loading @@ -448,10 +445,9 @@ struct ion_page_pool *ion_page_pool_create(struct device *dev, gfp_t gfp_mask, void ion_page_pool_destroy(struct ion_page_pool *); void *ion_page_pool_alloc(struct ion_page_pool *, bool *from_pool); void *ion_page_pool_alloc_pool_only(struct ion_page_pool *); void ion_page_pool_free(struct ion_page_pool *, struct page *, bool prefetch); void ion_page_pool_free(struct ion_page_pool *, struct page *); void ion_page_pool_free_immediate(struct ion_page_pool *, struct page *); int ion_page_pool_total(struct ion_page_pool *pool, bool high); void *ion_page_pool_prefetch(struct ion_page_pool *pool, bool *from_pool); #ifdef CONFIG_ION_POOL_CACHE_POLICY static inline void ion_page_pool_alloc_set_cache_policy Loading drivers/staging/android/ion/ion_system_heap.c +3 −8 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ static struct page *alloc_buffer_page(struct ion_system_heap *heap, bool *from_pool) { bool cached = ion_buffer_cached(buffer); bool prefetch = buffer->flags & ION_FLAG_POOL_PREFETCH; struct page *page; struct ion_page_pool *pool; int vmid = get_secure_vmid(buffer->flags); Loading @@ -92,9 +91,6 @@ static struct page *alloc_buffer_page(struct ion_system_heap *heap, else pool = heap->cached_pools[order_to_index(order)]; if (prefetch) page = ion_page_pool_prefetch(pool, from_pool); else page = ion_page_pool_alloc(pool, from_pool); } else { gfp_t gfp_mask = low_order_gfp_flags; Loading @@ -119,7 +115,6 @@ static void free_buffer_page(struct ion_system_heap *heap, unsigned int order) { bool cached = ion_buffer_cached(buffer); bool prefetch = buffer->flags & ION_FLAG_POOL_PREFETCH; int vmid = get_secure_vmid(buffer->flags); if (!(buffer->flags & ION_FLAG_POOL_FORCE_ALLOC)) { Loading @@ -134,7 +129,7 @@ static void free_buffer_page(struct ion_system_heap *heap, if (buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE) ion_page_pool_free_immediate(pool, page); else ion_page_pool_free(pool, page, prefetch); ion_page_pool_free(pool, page); } else { __free_pages(page, order); } Loading Loading @@ -452,7 +447,7 @@ out1: /* Restore pages to secure pool */ list_for_each_entry_safe(page, tmp, &pages, lru) { list_del(&page->lru); ion_page_pool_free(pool, page, false); ion_page_pool_free(pool, page); } return 0; out2: Loading drivers/staging/android/ion/ion_system_secure_heap.c +1 −2 Original line number Diff line number Diff line Loading @@ -151,8 +151,7 @@ static void ion_system_secure_heap_prefetch_work(struct work_struct *work) /* buffer->heap used by free() */ buffer->heap = &secure_heap->heap; buffer->flags = ION_FLAG_POOL_PREFETCH; buffer->flags |= vmid_flags; buffer->flags = vmid_flags; ret = sys_heap->ops->allocate(sys_heap, buffer, size, PAGE_SIZE, 0); if (ret) { Loading drivers/staging/android/uapi/msm_ion.h +0 −2 Original line number Diff line number Diff line Loading @@ -110,8 +110,6 @@ enum cp_mem_usage { */ #define ION_FLAG_POOL_FORCE_ALLOC (1 << 16) #define ION_FLAG_POOL_PREFETCH (1 << 27) /** * Deprecated! Please use the corresponding ION_FLAG_* */ Loading Loading
drivers/staging/android/ion/ion_page_pool.c +10 −46 Original line number Diff line number Diff line Loading @@ -54,8 +54,7 @@ static void ion_page_pool_free_pages(struct ion_page_pool *pool, __free_pages(page, pool->order); } static int ion_page_pool_add(struct ion_page_pool *pool, struct page *page, bool prefetch) static int ion_page_pool_add(struct ion_page_pool *pool, struct page *page) { mutex_lock(&pool->mutex); if (PageHighMem(page)) { Loading @@ -65,15 +64,11 @@ static int ion_page_pool_add(struct ion_page_pool *pool, struct page *page, list_add_tail(&page->lru, &pool->low_items); pool->low_count++; } if (!prefetch) pool->nr_unreserved++; mutex_unlock(&pool->mutex); return 0; } static struct page *ion_page_pool_remove(struct ion_page_pool *pool, bool high, bool prefetch) static struct page *ion_page_pool_remove(struct ion_page_pool *pool, bool high) { struct page *page; Loading @@ -87,13 +82,6 @@ static struct page *ion_page_pool_remove(struct ion_page_pool *pool, bool high, pool->low_count--; } if (prefetch) { BUG_ON(!pool->nr_unreserved); pool->nr_unreserved--; } pool->nr_unreserved = min_t(int, pool->high_count + pool->low_count, pool->nr_unreserved); list_del(&page->lru); return page; } Loading @@ -108,9 +96,9 @@ void *ion_page_pool_alloc(struct ion_page_pool *pool, bool *from_pool) if (mutex_trylock(&pool->mutex)) { if (pool->high_count) page = ion_page_pool_remove(pool, true, false); page = ion_page_pool_remove(pool, true); else if (pool->low_count) page = ion_page_pool_remove(pool, false, false); page = ion_page_pool_remove(pool, false); mutex_unlock(&pool->mutex); } if (!page) { Loading @@ -120,27 +108,6 @@ void *ion_page_pool_alloc(struct ion_page_pool *pool, bool *from_pool) return page; } void *ion_page_pool_prefetch(struct ion_page_pool *pool, bool *from_pool) { struct page *page = NULL; BUG_ON(!pool); *from_pool = true; if (mutex_trylock(&pool->mutex)) { if (pool->high_count && pool->nr_unreserved > 0) page = ion_page_pool_remove(pool, true, true); else if (pool->low_count && pool->nr_unreserved > 0) page = ion_page_pool_remove(pool, false, true); mutex_unlock(&pool->mutex); } if (!page) { page = ion_page_pool_alloc_pages(pool); *from_pool = false; } return page; } /* * Tries to allocate from only the specified Pool and returns NULL otherwise */ Loading @@ -152,24 +119,22 @@ void *ion_page_pool_alloc_pool_only(struct ion_page_pool *pool) if (mutex_trylock(&pool->mutex)) { if (pool->high_count) page = ion_page_pool_remove(pool, true, false); page = ion_page_pool_remove(pool, true); else if (pool->low_count) page = ion_page_pool_remove(pool, false, false); page = ion_page_pool_remove(pool, false); mutex_unlock(&pool->mutex); } return page; } void ion_page_pool_free(struct ion_page_pool *pool, struct page *page, bool prefetch) void ion_page_pool_free(struct ion_page_pool *pool, struct page *page) { int ret; BUG_ON(pool->order != compound_order(page)); ret = ion_page_pool_add(pool, page, prefetch); /* FIXME? For a secure page, not hyp unassigned in this err path */ ret = ion_page_pool_add(pool, page); if (ret) ion_page_pool_free_pages(pool, page); } Loading Loading @@ -208,9 +173,9 @@ int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask, mutex_lock(&pool->mutex); if (pool->low_count) { page = ion_page_pool_remove(pool, false, false); page = ion_page_pool_remove(pool, false); } else if (high && pool->high_count) { page = ion_page_pool_remove(pool, true, false); page = ion_page_pool_remove(pool, true); } else { mutex_unlock(&pool->mutex); break; Loading @@ -233,7 +198,6 @@ struct ion_page_pool *ion_page_pool_create(struct device *dev, gfp_t gfp_mask, pool->dev = dev; pool->high_count = 0; pool->low_count = 0; pool->nr_unreserved = 0; INIT_LIST_HEAD(&pool->low_items); INIT_LIST_HEAD(&pool->high_items); pool->gfp_mask = gfp_mask | __GFP_COMP; Loading
drivers/staging/android/ion/ion_priv.h +1 −5 Original line number Diff line number Diff line Loading @@ -415,8 +415,6 @@ void ion_carveout_free(struct ion_heap *heap, ion_phys_addr_t addr, * struct ion_page_pool - pagepool struct * @high_count: number of highmem items in the pool * @low_count: number of lowmem items in the pool * @nr_unreserved: number of items in the pool which have not been reserved * by a prefetch allocation * @high_items: list of highmem items * @low_items: list of lowmem items * @mutex: lock protecting this struct and especially the count Loading @@ -433,7 +431,6 @@ void ion_carveout_free(struct ion_heap *heap, ion_phys_addr_t addr, struct ion_page_pool { int high_count; int low_count; int nr_unreserved; struct list_head high_items; struct list_head low_items; struct mutex mutex; Loading @@ -448,10 +445,9 @@ struct ion_page_pool *ion_page_pool_create(struct device *dev, gfp_t gfp_mask, void ion_page_pool_destroy(struct ion_page_pool *); void *ion_page_pool_alloc(struct ion_page_pool *, bool *from_pool); void *ion_page_pool_alloc_pool_only(struct ion_page_pool *); void ion_page_pool_free(struct ion_page_pool *, struct page *, bool prefetch); void ion_page_pool_free(struct ion_page_pool *, struct page *); void ion_page_pool_free_immediate(struct ion_page_pool *, struct page *); int ion_page_pool_total(struct ion_page_pool *pool, bool high); void *ion_page_pool_prefetch(struct ion_page_pool *pool, bool *from_pool); #ifdef CONFIG_ION_POOL_CACHE_POLICY static inline void ion_page_pool_alloc_set_cache_policy Loading
drivers/staging/android/ion/ion_system_heap.c +3 −8 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ static struct page *alloc_buffer_page(struct ion_system_heap *heap, bool *from_pool) { bool cached = ion_buffer_cached(buffer); bool prefetch = buffer->flags & ION_FLAG_POOL_PREFETCH; struct page *page; struct ion_page_pool *pool; int vmid = get_secure_vmid(buffer->flags); Loading @@ -92,9 +91,6 @@ static struct page *alloc_buffer_page(struct ion_system_heap *heap, else pool = heap->cached_pools[order_to_index(order)]; if (prefetch) page = ion_page_pool_prefetch(pool, from_pool); else page = ion_page_pool_alloc(pool, from_pool); } else { gfp_t gfp_mask = low_order_gfp_flags; Loading @@ -119,7 +115,6 @@ static void free_buffer_page(struct ion_system_heap *heap, unsigned int order) { bool cached = ion_buffer_cached(buffer); bool prefetch = buffer->flags & ION_FLAG_POOL_PREFETCH; int vmid = get_secure_vmid(buffer->flags); if (!(buffer->flags & ION_FLAG_POOL_FORCE_ALLOC)) { Loading @@ -134,7 +129,7 @@ static void free_buffer_page(struct ion_system_heap *heap, if (buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE) ion_page_pool_free_immediate(pool, page); else ion_page_pool_free(pool, page, prefetch); ion_page_pool_free(pool, page); } else { __free_pages(page, order); } Loading Loading @@ -452,7 +447,7 @@ out1: /* Restore pages to secure pool */ list_for_each_entry_safe(page, tmp, &pages, lru) { list_del(&page->lru); ion_page_pool_free(pool, page, false); ion_page_pool_free(pool, page); } return 0; out2: Loading
drivers/staging/android/ion/ion_system_secure_heap.c +1 −2 Original line number Diff line number Diff line Loading @@ -151,8 +151,7 @@ static void ion_system_secure_heap_prefetch_work(struct work_struct *work) /* buffer->heap used by free() */ buffer->heap = &secure_heap->heap; buffer->flags = ION_FLAG_POOL_PREFETCH; buffer->flags |= vmid_flags; buffer->flags = vmid_flags; ret = sys_heap->ops->allocate(sys_heap, buffer, size, PAGE_SIZE, 0); if (ret) { Loading
drivers/staging/android/uapi/msm_ion.h +0 −2 Original line number Diff line number Diff line Loading @@ -110,8 +110,6 @@ enum cp_mem_usage { */ #define ION_FLAG_POOL_FORCE_ALLOC (1 << 16) #define ION_FLAG_POOL_PREFETCH (1 << 27) /** * Deprecated! Please use the corresponding ION_FLAG_* */ Loading