From f2b4e4dcc38d0a84efec0e92680aa3633676d6a8 Mon Sep 17 00:00:00 2001 From: Sooyong Suk Date: Wed, 17 Jul 2024 17:20:52 +0900 Subject: [PATCH] ANDROID: mm: add vendor hook to bypass madvise_pageout Add vendor hook to bypass madvise_pageout on some conditions such as mmap_lock contention. Bug: 351175506 Change-Id: Idbdcdf196cb10bbf7f92775fbc539137ca961c54 Signed-off-by: Sooyong Suk --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/madvise.h | 3 +++ mm/madvise.c | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 6d4f9f780f3b..b3709fc5a1ec 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -333,3 +333,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_signal); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_process_madvise_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_pageout_return_error); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_process_madvise_return_error); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_pageout_bypass); diff --git a/include/trace/hooks/madvise.h b/include/trace/hooks/madvise.h index a92912c02a21..0dbf30712a9d 100644 --- a/include/trace/hooks/madvise.h +++ b/include/trace/hooks/madvise.h @@ -17,6 +17,9 @@ DECLARE_HOOK(android_vh_madvise_pageout_return_error, DECLARE_HOOK(android_vh_process_madvise_return_error, TP_PROTO(int behavior, int ret, bool *return_error), TP_ARGS(behavior, ret, return_error)); +DECLARE_HOOK(android_vh_madvise_pageout_bypass, + TP_PROTO(struct mm_struct *mm, bool pageout, int *ret), + TP_ARGS(mm, pageout, ret)); #endif diff --git a/mm/madvise.c b/mm/madvise.c index 10fd7f23a04a..5c106c393300 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -352,10 +352,15 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd, bool pageout_anon_only_filter; unsigned int batch_count = 0; int nr; + int ret = 0; if (fatal_signal_pending(current)) return -EINTR; + trace_android_vh_madvise_pageout_bypass(mm, pageout, &ret); + if (ret) + return ret; + pageout_anon_only_filter = pageout && !vma_is_anonymous(vma) && !can_do_file_pageout(vma);