diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 7cb794211f29..d658ee5c837c 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -425,6 +425,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_read_fault); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_queue_request_and_unlock); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_fuse_request_end); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_trylock_failed); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_memcg_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shmem_swapin_folio); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_wp_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_swap_page); diff --git a/include/trace/hooks/vmscan.h b/include/trace/hooks/vmscan.h index 369a2c596376..781c1a4a2072 100644 --- a/include/trace/hooks/vmscan.h +++ b/include/trace/hooks/vmscan.h @@ -72,6 +72,9 @@ DECLARE_HOOK(android_vh_do_folio_trylock, DECLARE_HOOK(android_vh_page_referenced_check_bypass, TP_PROTO(struct folio *folio, unsigned long nr_to_scan, int lru, bool *bypass), TP_ARGS(folio, nr_to_scan, lru, bypass)); +DECLARE_HOOK(android_vh_should_memcg_bypass, + TP_PROTO(struct mem_cgroup *memcg, int priority, bool *bypass), + TP_ARGS(memcg, priority, bypass)); #endif /* _TRACE_HOOK_VMSCAN_H */ /* This part must be outside protection */ #include diff --git a/mm/vmscan.c b/mm/vmscan.c index 3ca85f4a7a9d..cff62bfce9c3 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -5482,6 +5482,7 @@ static void shrink_many(struct pglist_data *pgdat, struct scan_control *sc) struct lru_gen_folio *lrugen = NULL; struct mem_cgroup *memcg; const struct hlist_nulls_node *pos; + bool bypass = false; bin = first_bin = get_random_u32_below(MEMCG_NR_BINS); restart: @@ -5508,6 +5509,10 @@ restart: continue; } + trace_android_vh_should_memcg_bypass(memcg, sc->priority, &bypass); + if (bypass) + continue; + rcu_read_unlock(); op = shrink_one(lruvec, sc);