diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 610d996cd217..2d485af5ac73 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -275,3 +275,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_async_psi_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cma_alloc_retry); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_smaps_pte_entry); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_smap); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rebalance_anon_lru_bypass); diff --git a/include/trace/hooks/vmscan.h b/include/trace/hooks/vmscan.h index 66d0f3b279a8..357d1bb1aacb 100644 --- a/include/trace/hooks/vmscan.h +++ b/include/trace/hooks/vmscan.h @@ -40,6 +40,9 @@ DECLARE_HOOK(android_vh_should_memcg_bypass, DECLARE_HOOK(android_vh_do_shrink_slab, TP_PROTO(struct shrinker *shrinker, long *freeable), TP_ARGS(shrinker, freeable)); +DECLARE_HOOK(android_vh_rebalance_anon_lru_bypass, + TP_PROTO(bool *bypass), + TP_ARGS(bypass)); #endif /* _TRACE_HOOK_VMSCAN_H */ /* This part must be outside protection */ #include diff --git a/mm/vmscan.c b/mm/vmscan.c index de5cc20847b5..0494bee69ea5 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -5712,6 +5712,7 @@ static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) unsigned long nr_to_reclaim = sc->nr_to_reclaim; bool proportional_reclaim; struct blk_plug plug; + bool bypass = false; if (lru_gen_enabled() && !root_reclaim(sc)) { lru_gen_shrink_lruvec(lruvec, sc); @@ -5809,6 +5810,9 @@ static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) } blk_finish_plug(&plug); sc->nr_reclaimed += nr_reclaimed; + trace_android_vh_rebalance_anon_lru_bypass(&bypass); + if (bypass) + return; /* * Even if we did not try to evict anon pages at all, we want to