Loading drivers/gpu/msm/kgsl_pool.c +13 −1 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ #include "kgsl_device.h" #include "kgsl_pool.h" #include "kgsl_sharedmem.h" #include "kgsl_trace.h" /** * struct kgsl_page_pool - Structure to hold information for the pool Loading Loading @@ -108,6 +109,8 @@ _kgsl_pool_add_page(struct kgsl_page_pool *pool, struct page *p) list_add_tail(&p->lru, &pool->page_list); pool->page_count++; spin_unlock(&pool->list_lock); trace_kgsl_pool_add_page(pool->pool_order, pool->page_count); mod_node_page_state(page_pgdat(p), NR_KERNEL_MISC_RECLAIMABLE, (1 << pool->pool_order)); } Loading @@ -128,6 +131,8 @@ _kgsl_pool_get_page(struct kgsl_page_pool *pool) pool->page_count--; list_del(&p->lru); spin_unlock(&pool->list_lock); trace_kgsl_pool_get_page(pool->pool_order, pool->page_count); mod_node_page_state(page_pgdat(p), NR_KERNEL_MISC_RECLAIMABLE, -(1 << pool->pool_order)); return p; Loading Loading @@ -179,6 +184,7 @@ _kgsl_pool_shrink(struct kgsl_page_pool *pool, __free_pages(page, pool->pool_order); pcount += (1 << pool->pool_order); trace_kgsl_pool_free_page(pool->pool_order); } return pcount; Loading Loading @@ -353,10 +359,11 @@ static int kgsl_pool_alloc_page(int *page_size, struct page **pages, if (order > 0) { size = PAGE_SIZE << --order; goto eagain; } else return -ENOMEM; } trace_kgsl_pool_alloc_page_system(order); goto done; } Loading @@ -376,6 +383,7 @@ static int kgsl_pool_alloc_page(int *page_size, struct page **pages, page = alloc_pages(gfp_mask, order); if (page == NULL) return -ENOMEM; trace_kgsl_pool_alloc_page_system(order); goto done; } } Loading @@ -398,6 +406,8 @@ static int kgsl_pool_alloc_page(int *page_size, struct page **pages, } else return -ENOMEM; } trace_kgsl_pool_alloc_page_system(order); } done: Loading @@ -412,6 +422,7 @@ static int kgsl_pool_alloc_page(int *page_size, struct page **pages, return pcount; eagain: trace_kgsl_pool_try_page_lower(get_order(*page_size)); *page_size = kgsl_get_page_size(size, ilog2(size)); *align = ilog2(*page_size); return -EAGAIN; Loading Loading @@ -490,6 +501,7 @@ static void kgsl_pool_free_page(struct page *page) /* Give back to system as not added to pool */ __free_pages(page, page_order); trace_kgsl_pool_free_page(page_order); } /* Functions for the shrinker */ Loading drivers/gpu/msm/kgsl_trace.h +75 −1 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2011-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2011-2021, The Linux Foundation. All rights reserved. */ #if !defined(_KGSL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) Loading Loading @@ -1338,6 +1338,80 @@ TRACE_EVENT(kgsl_drawobj_timeline, ) ); TRACE_EVENT(kgsl_pool_add_page, TP_PROTO(int order, u32 count), TP_ARGS(order, count), TP_STRUCT__entry( __field(int, order) __field(u32, count) ), TP_fast_assign( __entry->order = order; __entry->count = count; ), TP_printk("order=%d count=%u", __entry->order, __entry->count ) ); TRACE_EVENT(kgsl_pool_get_page, TP_PROTO(int order, u32 count), TP_ARGS(order, count), TP_STRUCT__entry( __field(int, order) __field(u32, count) ), TP_fast_assign( __entry->order = order; __entry->count = count; ), TP_printk("order=%d count=%u", __entry->order, __entry->count ) ); TRACE_EVENT(kgsl_pool_alloc_page_system, TP_PROTO(int order), TP_ARGS(order), TP_STRUCT__entry( __field(int, order) ), TP_fast_assign( __entry->order = order; ), TP_printk("order=%d", __entry->order ) ); TRACE_EVENT(kgsl_pool_try_page_lower, TP_PROTO(int order), TP_ARGS(order), TP_STRUCT__entry( __field(int, order) ), TP_fast_assign( __entry->order = order; ), TP_printk("order=%d", __entry->order ) ); TRACE_EVENT(kgsl_pool_free_page, TP_PROTO(int order), TP_ARGS(order), TP_STRUCT__entry( __field(int, order) ), TP_fast_assign( __entry->order = order; ), TP_printk("order=%d", __entry->order ) ); #endif /* _KGSL_TRACE_H */ /* This part must be outside protection */ Loading Loading
drivers/gpu/msm/kgsl_pool.c +13 −1 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ #include "kgsl_device.h" #include "kgsl_pool.h" #include "kgsl_sharedmem.h" #include "kgsl_trace.h" /** * struct kgsl_page_pool - Structure to hold information for the pool Loading Loading @@ -108,6 +109,8 @@ _kgsl_pool_add_page(struct kgsl_page_pool *pool, struct page *p) list_add_tail(&p->lru, &pool->page_list); pool->page_count++; spin_unlock(&pool->list_lock); trace_kgsl_pool_add_page(pool->pool_order, pool->page_count); mod_node_page_state(page_pgdat(p), NR_KERNEL_MISC_RECLAIMABLE, (1 << pool->pool_order)); } Loading @@ -128,6 +131,8 @@ _kgsl_pool_get_page(struct kgsl_page_pool *pool) pool->page_count--; list_del(&p->lru); spin_unlock(&pool->list_lock); trace_kgsl_pool_get_page(pool->pool_order, pool->page_count); mod_node_page_state(page_pgdat(p), NR_KERNEL_MISC_RECLAIMABLE, -(1 << pool->pool_order)); return p; Loading Loading @@ -179,6 +184,7 @@ _kgsl_pool_shrink(struct kgsl_page_pool *pool, __free_pages(page, pool->pool_order); pcount += (1 << pool->pool_order); trace_kgsl_pool_free_page(pool->pool_order); } return pcount; Loading Loading @@ -353,10 +359,11 @@ static int kgsl_pool_alloc_page(int *page_size, struct page **pages, if (order > 0) { size = PAGE_SIZE << --order; goto eagain; } else return -ENOMEM; } trace_kgsl_pool_alloc_page_system(order); goto done; } Loading @@ -376,6 +383,7 @@ static int kgsl_pool_alloc_page(int *page_size, struct page **pages, page = alloc_pages(gfp_mask, order); if (page == NULL) return -ENOMEM; trace_kgsl_pool_alloc_page_system(order); goto done; } } Loading @@ -398,6 +406,8 @@ static int kgsl_pool_alloc_page(int *page_size, struct page **pages, } else return -ENOMEM; } trace_kgsl_pool_alloc_page_system(order); } done: Loading @@ -412,6 +422,7 @@ static int kgsl_pool_alloc_page(int *page_size, struct page **pages, return pcount; eagain: trace_kgsl_pool_try_page_lower(get_order(*page_size)); *page_size = kgsl_get_page_size(size, ilog2(size)); *align = ilog2(*page_size); return -EAGAIN; Loading Loading @@ -490,6 +501,7 @@ static void kgsl_pool_free_page(struct page *page) /* Give back to system as not added to pool */ __free_pages(page, page_order); trace_kgsl_pool_free_page(page_order); } /* Functions for the shrinker */ Loading
drivers/gpu/msm/kgsl_trace.h +75 −1 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2011-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2011-2021, The Linux Foundation. All rights reserved. */ #if !defined(_KGSL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) Loading Loading @@ -1338,6 +1338,80 @@ TRACE_EVENT(kgsl_drawobj_timeline, ) ); TRACE_EVENT(kgsl_pool_add_page, TP_PROTO(int order, u32 count), TP_ARGS(order, count), TP_STRUCT__entry( __field(int, order) __field(u32, count) ), TP_fast_assign( __entry->order = order; __entry->count = count; ), TP_printk("order=%d count=%u", __entry->order, __entry->count ) ); TRACE_EVENT(kgsl_pool_get_page, TP_PROTO(int order, u32 count), TP_ARGS(order, count), TP_STRUCT__entry( __field(int, order) __field(u32, count) ), TP_fast_assign( __entry->order = order; __entry->count = count; ), TP_printk("order=%d count=%u", __entry->order, __entry->count ) ); TRACE_EVENT(kgsl_pool_alloc_page_system, TP_PROTO(int order), TP_ARGS(order), TP_STRUCT__entry( __field(int, order) ), TP_fast_assign( __entry->order = order; ), TP_printk("order=%d", __entry->order ) ); TRACE_EVENT(kgsl_pool_try_page_lower, TP_PROTO(int order), TP_ARGS(order), TP_STRUCT__entry( __field(int, order) ), TP_fast_assign( __entry->order = order; ), TP_printk("order=%d", __entry->order ) ); TRACE_EVENT(kgsl_pool_free_page, TP_PROTO(int order), TP_ARGS(order), TP_STRUCT__entry( __field(int, order) ), TP_fast_assign( __entry->order = order; ), TP_printk("order=%d", __entry->order ) ); #endif /* _KGSL_TRACE_H */ /* This part must be outside protection */ Loading