From 0312e9cd22b100a088ff64ab36b2db2eb9f28b7c Mon Sep 17 00:00:00 2001 From: xiaofeng Date: Wed, 24 Aug 2022 19:34:06 +0800 Subject: [PATCH] ANDROID: vendor_hooks:vendor hook for __alloc_pages_slowpath. add vendor hook in __alloc_pages_slowpath ahead of __alloc_pages_direct_reclaim and warn_alloc. Bug: 243629905 Change-Id: Ieacc6cf79823c0bfacfdeec9afb55ed66f40d0b0 Signed-off-by: xiaofeng --- drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/mm.h | 9 ++++++++- mm/page_alloc.c | 11 +++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 7f8ef8d61229..e1ef12593212 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -451,3 +451,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_uid); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_user); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_modify_thermal_cpu_get_power); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_cache_forced_ra); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_reclaim_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_failure_bypass); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index cb981aaf4bfc..b3c28c74cc79 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -121,7 +121,14 @@ DECLARE_HOOK(android_vh_mark_page_accessed, DECLARE_HOOK(android_vh_page_cache_forced_ra, TP_PROTO(struct readahead_control *ractl, unsigned long req_count, bool *do_forced_ra), TP_ARGS(ractl, req_count, do_forced_ra)); - +DECLARE_HOOK(android_vh_alloc_pages_reclaim_bypass, + TP_PROTO(gfp_t gfp_mask, int order, int alloc_flags, + int migratetype, struct page **page), + TP_ARGS(gfp_mask, order, alloc_flags, migratetype, page)); +DECLARE_HOOK(android_vh_alloc_pages_failure_bypass, + TP_PROTO(gfp_t gfp_mask, int order, int alloc_flags, + int migratetype, struct page **page), + TP_ARGS(gfp_mask, order, alloc_flags, migratetype, page)); #endif /* _TRACE_HOOK_MM_H */ /* This part must be outside protection */ diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 5ee68470654f..001cdcc60b0b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -5145,6 +5145,12 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, if (current->flags & PF_MEMALLOC) goto nopage; + trace_android_vh_alloc_pages_reclaim_bypass(gfp_mask, order, + alloc_flags, ac->migratetype, &page); + + if (page) + goto got_pg; + /* Try direct reclaim and then allocating */ page = __alloc_pages_direct_reclaim(gfp_mask, order, alloc_flags, ac, &did_some_progress); @@ -5252,6 +5258,11 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, goto retry; } fail: + trace_android_vh_alloc_pages_failure_bypass(gfp_mask, order, + alloc_flags, ac->migratetype, &page); + if (page) + goto got_pg; + warn_alloc(gfp_mask, ac->nodemask, "page allocation failure: order:%u", order); got_pg: