From f9d06fbaa8f4886fa072667c69b3e0b570be6b97 Mon Sep 17 00:00:00 2001 From: hailong Date: Fri, 3 Oct 2025 17:21:18 +0800 Subject: [PATCH] ANDROID: mm: mglru: add vendor_hook for should_abort_scan() Add android_vh_mglru_should_abort_scan_ex() the hook is similar to android_vh_mglru_should_abort_scan() introduced in https://android-review.googlesource.com/c/kernel/common/+/3452054 but accepts a vendor data field to store the statistics of reclaim. Bug: 365008739 Bug: 449066551 Bug: 451083029 Change-Id: I1c64dfebf5f9fc3766279c84b9b26fbb89a0997a Signed-off-by: hailong (cherry picked from commit c06b1f4b2109ea3fb82fe6fad37c7de01660faf1) --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/vmscan.h | 3 +++ mm/vmscan.c | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 8e763cefbbce..b2d3b6f42e47 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -287,6 +287,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_oem_binder_struct); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_special_task); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_buffer_release); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mglru_should_abort_scan); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mglru_should_abort_scan_ex); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_shrink_slab); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_page_wmark); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_add_new_anon_rmap); diff --git a/include/trace/hooks/vmscan.h b/include/trace/hooks/vmscan.h index e95911530f16..e95564246c12 100644 --- a/include/trace/hooks/vmscan.h +++ b/include/trace/hooks/vmscan.h @@ -60,6 +60,9 @@ DECLARE_HOOK(android_vh_mglru_should_abort_scan, TP_PROTO(unsigned long nr_reclaimed, unsigned long nr_to_reclaim, unsigned int order, bool *bypass), TP_ARGS(nr_to_reclaim, nr_reclaimed, order, bypass)); +DECLARE_HOOK(android_vh_mglru_should_abort_scan_ex, + TP_PROTO(u64 *ext, bool *bypass), + TP_ARGS(ext, bypass)); DECLARE_HOOK(android_vh_mglru_aging_bypass, TP_PROTO(struct lruvec *lruvec, unsigned long max_seq, int swappiness, bool *bypass, bool *young), diff --git a/mm/vmscan.c b/mm/vmscan.c index 4762fbe86d0c..5a3fe601bb95 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -4912,6 +4912,10 @@ static bool should_abort_scan(struct lruvec *lruvec, struct scan_control *sc) trace_android_vh_mglru_should_abort_scan(sc->nr_reclaimed, sc->nr_to_reclaim, sc->order, &bypass); +#ifdef CONFIG_ANDROID_VENDOR_OEM_DATA + trace_android_vh_mglru_should_abort_scan_ex(&sc->android_vendor_data1, + &bypass); +#endif /* don't abort memcg reclaim to ensure fairness */ if (!root_reclaim(sc) && !bypass) return false;