From 6eb3621bef658dd9afa84d6e5fbdee131a23ea93 Mon Sep 17 00:00:00 2001 From: Jordan Crouse Date: Tue, 1 Dec 2020 13:49:22 -0700 Subject: [PATCH] msm: kgsl: Add tracepoints for the pools Add trace points to track credit and debits to the KGSL memory pools. Change-Id: Ic0dedbade3ecac12e625a08a9be372bd857f68d2 Signed-off-by: Jordan Crouse Signed-off-by: Neeraja P --- drivers/gpu/msm/kgsl_pool.c | 14 ++++++- drivers/gpu/msm/kgsl_trace.h | 76 +++++++++++++++++++++++++++++++++++- 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/msm/kgsl_pool.c b/drivers/gpu/msm/kgsl_pool.c index 58f8d2caf2b7..11d4630b8310 100644 --- a/drivers/gpu/msm/kgsl_pool.c +++ b/drivers/gpu/msm/kgsl_pool.c @@ -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 @@ -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)); } @@ -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; @@ -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; @@ -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; } @@ -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; } } @@ -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: @@ -412,6 +422,7 @@ done: 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; @@ -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 */ diff --git a/drivers/gpu/msm/kgsl_trace.h b/drivers/gpu/msm/kgsl_trace.h index f6097c06d007..cdf7dfe5771b 100644 --- a/drivers/gpu/msm/kgsl_trace.h +++ b/drivers/gpu/msm/kgsl_trace.h @@ -1,6 +1,6 @@ /* 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) @@ -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 */