diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index ef8da5cc4c7c..09987377ca68 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -238,6 +238,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_oom_check_panic); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue_smallest_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_one_page_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_migration_target_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mglru_aging_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_node_memcgs_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_adjust_alloc_flags); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_scan_type); diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index cbfd1d151c56..540432972d5a 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -480,6 +480,8 @@ struct lru_gen_folio { u8 seg; /* per-node lru_gen_folio list for global reclaim */ struct hlist_nulls_node list; + + ANDROID_OEM_DATA_ARRAY(1, 6); }; enum { diff --git a/include/trace/hooks/vmscan.h b/include/trace/hooks/vmscan.h index 97329e5f81cb..d6b1206c1852 100644 --- a/include/trace/hooks/vmscan.h +++ b/include/trace/hooks/vmscan.h @@ -10,6 +10,7 @@ #include struct mem_cgroup_reclaim_cookie; +struct lruvec; DECLARE_RESTRICTED_HOOK(android_rvh_set_balance_anon_file_reclaim, TP_PROTO(bool *balance_anon_file_reclaim), @@ -36,6 +37,10 @@ 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_aging_bypass, + TP_PROTO(struct lruvec *lruvec, unsigned long max_seq, + int swappiness, bool *bypass, bool *young), + TP_ARGS(lruvec, max_seq, swappiness, bypass, young)); DECLARE_HOOK(android_vh_shrink_node_memcgs_bypass, TP_PROTO(u64 *ext, struct mem_cgroup_reclaim_cookie *partial, unsigned long nr_to_reclaim, unsigned long nr_reclaimed, diff --git a/mm/vmscan.c b/mm/vmscan.c index e0a9f699853d..af9a66cf99c3 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -4816,6 +4816,8 @@ static long get_nr_to_scan(struct lruvec *lruvec, struct scan_control *sc, int s unsigned long nr_to_scan; struct mem_cgroup *memcg = lruvec_memcg(lruvec); DEFINE_MAX_SEQ(lruvec); + bool bypass = false; + bool young = false; if (mem_cgroup_below_min(sc->target_mem_cgroup, memcg)) return -1; @@ -4830,6 +4832,11 @@ static long get_nr_to_scan(struct lruvec *lruvec, struct scan_control *sc, int s if (!success || sc->priority == DEF_PRIORITY) return nr_to_scan >> sc->priority; + trace_android_vh_mglru_aging_bypass(lruvec, max_seq, + swappiness, &bypass, &young); + if (bypass) + return young ? -1 : 0; + /* stop scanning this lruvec as it's low on cold folios */ return try_to_inc_max_seq(lruvec, max_seq, swappiness, false) ? -1 : 0; }