diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index de71b90eff5f..1552375e35ff 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -166,6 +166,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_sp_pc_abort); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_iommu_setup_dma_ops); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pick_next_entity); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_wakeup); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cma_alloc_start); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cma_alloc_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_pagecache_get_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_enable_thermal_genl_check); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 2fcc968e659e..5bd3c5a2741c 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -22,6 +22,13 @@ DECLARE_RESTRICTED_HOOK(android_rvh_set_gfp_zone_flags, DECLARE_RESTRICTED_HOOK(android_rvh_set_readahead_gfp_mask, TP_PROTO(gfp_t *flags), TP_ARGS(flags), 1); +DECLARE_HOOK(android_vh_cma_alloc_start, + TP_PROTO(s64 *ts), + TP_ARGS(ts)); +DECLARE_HOOK(android_vh_cma_alloc_finish, + TP_PROTO(struct cma *cma, struct page *page, unsigned long count, + unsigned int align, gfp_t gfp_mask, s64 ts), + TP_ARGS(cma, page, count, align, gfp_mask, ts)); DECLARE_HOOK(android_vh_rmqueue, TP_PROTO(struct zone *preferred_zone, struct zone *zone, unsigned int order, gfp_t gfp_flags, diff --git a/mm/cma.c b/mm/cma.c index 585600607b3c..a87178dff5df 100644 --- a/mm/cma.c +++ b/mm/cma.c @@ -37,6 +37,9 @@ #include #include +#undef CREATE_TRACE_POINTS +#include + #include "cma.h" struct cma cma_areas[MAX_CMA_AREAS]; @@ -439,6 +442,9 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align, int ret = -ENOMEM; int num_attempts = 0; int max_retries = 5; + s64 ts; + + trace_android_vh_cma_alloc_start(&ts); if (!cma || !cma->count || !cma->bitmap) goto out; @@ -531,6 +537,7 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align, pr_debug("%s(): returned %p\n", __func__, page); out: + trace_android_vh_cma_alloc_finish(cma, page, count, align, gfp_mask, ts); if (page) { count_vm_event(CMA_ALLOC_SUCCESS); cma_sysfs_account_success_pages(cma, count);