Loading drivers/gpu/msm/kgsl_pool.c +18 −0 Original line number Diff line number Diff line Loading @@ -422,6 +422,24 @@ void kgsl_pool_free_page(struct page *page) __free_pages(page, page_order); } /* * Return true if the pool of specified page size is supported * or no pools are supported otherwise return false. */ bool kgsl_pool_avaialable(int page_size) { int i; if (!kgsl_num_pools) return true; for (i = 0; i < kgsl_num_pools; i++) if (ilog2(page_size >> PAGE_SHIFT) == kgsl_pools[i].pool_order) return true; return false; } static void kgsl_pool_reserve_pages(void) { int i, j; Loading drivers/gpu/msm/kgsl_pool.h +2 −1 Original line number Diff line number Diff line /* Copyright (c) 2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -40,5 +40,6 @@ void kgsl_exit_page_pools(void); int kgsl_pool_alloc_page(int *page_size, struct page **pages, unsigned int pages_len, unsigned int *align); void kgsl_pool_free_page(struct page *p); bool kgsl_pool_avaialable(int size); #endif /* __KGSL_POOL_H */ drivers/gpu/msm/kgsl_sharedmem.c +0 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,6 @@ #include "kgsl_device.h" #include "kgsl_log.h" #include "kgsl_mmu.h" #include "kgsl_pool.h" /* * The user can set this from debugfs to force failed memory allocations to Loading drivers/gpu/msm/kgsl_sharedmem.h +8 −3 Original line number Diff line number Diff line Loading @@ -346,6 +346,8 @@ static inline void kgsl_free_sgt(struct sg_table *sgt) } } #include "kgsl_pool.h" /** * kgsl_get_page_size() - Get supported pagesize * @size: Size of the page Loading @@ -356,11 +358,14 @@ static inline void kgsl_free_sgt(struct sg_table *sgt) #ifndef CONFIG_ALLOC_BUFFERS_IN_4K_CHUNKS static inline int kgsl_get_page_size(size_t size, unsigned int align) { if (align >= ilog2(SZ_1M) && size >= SZ_1M) if (align >= ilog2(SZ_1M) && size >= SZ_1M && kgsl_pool_avaialable(SZ_1M)) return SZ_1M; else if (align >= ilog2(SZ_64K) && size >= SZ_64K) else if (align >= ilog2(SZ_64K) && size >= SZ_64K && kgsl_pool_avaialable(SZ_64K)) return SZ_64K; else if (align >= ilog2(SZ_8K) && size >= SZ_8K) else if (align >= ilog2(SZ_8K) && size >= SZ_8K && kgsl_pool_avaialable(SZ_8K)) return SZ_8K; else return PAGE_SIZE; Loading Loading
drivers/gpu/msm/kgsl_pool.c +18 −0 Original line number Diff line number Diff line Loading @@ -422,6 +422,24 @@ void kgsl_pool_free_page(struct page *page) __free_pages(page, page_order); } /* * Return true if the pool of specified page size is supported * or no pools are supported otherwise return false. */ bool kgsl_pool_avaialable(int page_size) { int i; if (!kgsl_num_pools) return true; for (i = 0; i < kgsl_num_pools; i++) if (ilog2(page_size >> PAGE_SHIFT) == kgsl_pools[i].pool_order) return true; return false; } static void kgsl_pool_reserve_pages(void) { int i, j; Loading
drivers/gpu/msm/kgsl_pool.h +2 −1 Original line number Diff line number Diff line /* Copyright (c) 2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -40,5 +40,6 @@ void kgsl_exit_page_pools(void); int kgsl_pool_alloc_page(int *page_size, struct page **pages, unsigned int pages_len, unsigned int *align); void kgsl_pool_free_page(struct page *p); bool kgsl_pool_avaialable(int size); #endif /* __KGSL_POOL_H */
drivers/gpu/msm/kgsl_sharedmem.c +0 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,6 @@ #include "kgsl_device.h" #include "kgsl_log.h" #include "kgsl_mmu.h" #include "kgsl_pool.h" /* * The user can set this from debugfs to force failed memory allocations to Loading
drivers/gpu/msm/kgsl_sharedmem.h +8 −3 Original line number Diff line number Diff line Loading @@ -346,6 +346,8 @@ static inline void kgsl_free_sgt(struct sg_table *sgt) } } #include "kgsl_pool.h" /** * kgsl_get_page_size() - Get supported pagesize * @size: Size of the page Loading @@ -356,11 +358,14 @@ static inline void kgsl_free_sgt(struct sg_table *sgt) #ifndef CONFIG_ALLOC_BUFFERS_IN_4K_CHUNKS static inline int kgsl_get_page_size(size_t size, unsigned int align) { if (align >= ilog2(SZ_1M) && size >= SZ_1M) if (align >= ilog2(SZ_1M) && size >= SZ_1M && kgsl_pool_avaialable(SZ_1M)) return SZ_1M; else if (align >= ilog2(SZ_64K) && size >= SZ_64K) else if (align >= ilog2(SZ_64K) && size >= SZ_64K && kgsl_pool_avaialable(SZ_64K)) return SZ_64K; else if (align >= ilog2(SZ_8K) && size >= SZ_8K) else if (align >= ilog2(SZ_8K) && size >= SZ_8K && kgsl_pool_avaialable(SZ_8K)) return SZ_8K; else return PAGE_SIZE; Loading