diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 3e26777a54c2..7ccf4c4fbf33 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -393,3 +393,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_thread_release); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_has_work_ilocked); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_read_done); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_handle_tlb_conf); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_node_memcgs); diff --git a/include/trace/hooks/vmscan.h b/include/trace/hooks/vmscan.h index 95fb17af29e8..48a00c6cede0 100644 --- a/include/trace/hooks/vmscan.h +++ b/include/trace/hooks/vmscan.h @@ -28,7 +28,9 @@ DECLARE_RESTRICTED_HOOK(android_rvh_set_balance_anon_file_reclaim, DECLARE_HOOK(android_vh_page_referenced_check_bypass, TP_PROTO(struct page *page, unsigned long nr_to_scan, int lru, bool *bypass), TP_ARGS(page, nr_to_scan, lru, bypass)); - +DECLARE_HOOK(android_vh_shrink_node_memcgs, + TP_PROTO(struct mem_cgroup *memcg, bool *skip), + TP_ARGS(memcg, skip)); #endif /* _TRACE_HOOK_VMSCAN_H */ /* This part must be outside protection */ #include diff --git a/mm/vmscan.c b/mm/vmscan.c index 2f496b3f1e5f..89beec62bfa2 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2699,6 +2699,7 @@ static void shrink_node_memcgs(pg_data_t *pgdat, struct scan_control *sc) struct lruvec *lruvec = mem_cgroup_lruvec(memcg, pgdat); unsigned long reclaimed; unsigned long scanned; + bool skip = false; /* * This loop can become CPU-bound when target memcgs @@ -2708,6 +2709,10 @@ static void shrink_node_memcgs(pg_data_t *pgdat, struct scan_control *sc) */ cond_resched(); + trace_android_vh_shrink_node_memcgs(memcg, &skip); + if (skip) + continue; + mem_cgroup_calculate_protection(target_memcg, memcg); if (mem_cgroup_below_min(memcg)) {