ANDROID: mm: cma: add vendor hoook in cma_alloc()

Add vendor hook for cma_alloc latency measuring.

Bug: 177231781
Signed-off-by: Minchan Kim <minchan@google.com>
Change-Id: Ia2dbb26454bd8f03489389b29b9a6c939d3c2bbb
This commit is contained in:
Minchan Kim
2021-04-01 18:25:57 -07:00
parent 180ab1b1e5
commit c6e85ea56b
3 changed files with 16 additions and 0 deletions

View File

@@ -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_vh_iommu_setup_dma_ops);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pick_next_entity); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pick_next_entity);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_wakeup); 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_rmqueue);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_pagecache_get_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_pagecache_get_page);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_enable_thermal_genl_check); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_enable_thermal_genl_check);

View File

@@ -22,6 +22,13 @@ DECLARE_RESTRICTED_HOOK(android_rvh_set_gfp_zone_flags,
DECLARE_RESTRICTED_HOOK(android_rvh_set_readahead_gfp_mask, DECLARE_RESTRICTED_HOOK(android_rvh_set_readahead_gfp_mask,
TP_PROTO(gfp_t *flags), TP_PROTO(gfp_t *flags),
TP_ARGS(flags), 1); 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, DECLARE_HOOK(android_vh_rmqueue,
TP_PROTO(struct zone *preferred_zone, struct zone *zone, TP_PROTO(struct zone *preferred_zone, struct zone *zone,
unsigned int order, gfp_t gfp_flags, unsigned int order, gfp_t gfp_flags,

View File

@@ -37,6 +37,9 @@
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <trace/events/cma.h> #include <trace/events/cma.h>
#undef CREATE_TRACE_POINTS
#include <trace/hooks/mm.h>
#include "cma.h" #include "cma.h"
struct cma cma_areas[MAX_CMA_AREAS]; 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 ret = -ENOMEM;
int num_attempts = 0; int num_attempts = 0;
int max_retries = 5; int max_retries = 5;
s64 ts;
trace_android_vh_cma_alloc_start(&ts);
if (!cma || !cma->count || !cma->bitmap) if (!cma || !cma->count || !cma->bitmap)
goto out; 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); pr_debug("%s(): returned %p\n", __func__, page);
out: out:
trace_android_vh_cma_alloc_finish(cma, page, count, align, gfp_mask, ts);
if (page) { if (page) {
count_vm_event(CMA_ALLOC_SUCCESS); count_vm_event(CMA_ALLOC_SUCCESS);
cma_sysfs_account_success_pages(cma, count); cma_sysfs_account_success_pages(cma, count);