From a2485b8abd57d21ce3b47b7bbcadf0a7bf05b0b0 Mon Sep 17 00:00:00 2001 From: Peifeng Li Date: Tue, 15 Mar 2022 21:24:08 +0800 Subject: [PATCH] ANDROID: vendor_hooks: Add hooks to for alloc_contig_range Provide a vendor hook to allow drain_all_pages to be skipped during alloc_contig_range in some cases to avoid delays caused by it in cases when the benefits of draining pcp lists are known to be small. Bug: 224732340 Signed-off-by: Peifeng Li Change-Id: I0a82f668cf985ad5344d666c0c6372a7e61c3798 --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 3 +++ mm/page_alloc.c | 6 +++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 7ccf4c4fbf33..44507a74e573 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -293,6 +293,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_swappiness); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_slab_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_referenced_check_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_drain_all_pages_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cma_drain_all_pages_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_event); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_group); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpuset_fork); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index cc00dcecfd71..b5db91c72bf5 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -122,6 +122,9 @@ DECLARE_HOOK(android_vh_drain_all_pages_bypass, int migratetype, unsigned long did_some_progress, bool *bypass), TP_ARGS(gfp_mask, order, alloc_flags, migratetype, did_some_progress, bypass)); +DECLARE_HOOK(android_vh_cma_drain_all_pages_bypass, + TP_PROTO(unsigned int migratetype, bool *bypass), + TP_ARGS(migratetype, bypass)); struct device; DECLARE_HOOK(android_vh_subpage_dma_contig_alloc, TP_PROTO(bool *allow_subpage_alloc, struct device *dev, size_t *size), diff --git a/mm/page_alloc.c b/mm/page_alloc.c index a9822a2175c5..4bd60d681200 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -8720,6 +8720,7 @@ int alloc_contig_range(unsigned long start, unsigned long end, unsigned long outer_start, outer_end; unsigned int order; int ret = 0; + bool skip_drain_all_pages = false; struct compact_control cc = { .nr_migratepages = 0, @@ -8765,7 +8766,10 @@ int alloc_contig_range(unsigned long start, unsigned long end, return ret; } - drain_all_pages(cc.zone); + trace_android_vh_cma_drain_all_pages_bypass(migratetype, + &skip_drain_all_pages); + if (skip_drain_all_pages) + drain_all_pages(cc.zone); /* * In case of -EBUSY, we'd like to know which page causes problem.