diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 77dd1eb1b1f3..84184cc4a83e 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -481,3 +481,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_map_pages_range); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vprintk_store); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_folio_referenced_check_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_calculate_totalreserve_pages); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_drain_all_pages_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_pageset_update); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index fdbdd8080370..0e0403625dbf 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -315,6 +315,14 @@ DECLARE_HOOK(android_vh_filemap_map_pages_range, DECLARE_HOOK(android_vh_calculate_totalreserve_pages, TP_PROTO(bool *skip), TP_ARGS(skip)); +DECLARE_HOOK(android_vh_drain_all_pages_bypass, + TP_PROTO(gfp_t gfp_mask, unsigned int order, unsigned long alloc_flags, + int migratetype, unsigned long did_some_progress, + bool *bypass), + TP_ARGS(gfp_mask, order, alloc_flags, migratetype, did_some_progress, bypass)); +DECLARE_HOOK(android_vh_pageset_update, + TP_PROTO(unsigned long *high, unsigned long *batch), + TP_ARGS(high, batch)); #endif /* _TRACE_HOOK_MM_H */ /* This part must be outside protection */ diff --git a/mm/page_alloc.c b/mm/page_alloc.c index ffc6abc47849..a1605834867e 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -5026,6 +5026,7 @@ __alloc_pages_direct_reclaim(gfp_t gfp_mask, unsigned int order, struct page *page = NULL; unsigned long pflags; bool drained = false; + bool skip_pcp_drain = false; trace_android_vh_mm_alloc_pages_direct_reclaim_enter(order); psi_memstall_enter(&pflags); @@ -5043,7 +5044,10 @@ retry: */ if (!page && !drained) { unreserve_highatomic_pageblock(ac, false); - drain_all_pages(NULL); + trace_android_vh_drain_all_pages_bypass(gfp_mask, order, + alloc_flags, ac->migratetype, *did_some_progress, &skip_pcp_drain); + if (!skip_pcp_drain) + drain_all_pages(NULL); drained = true; ++retry_times; goto retry; @@ -7475,6 +7479,7 @@ static int zone_highsize(struct zone *zone, int batch, int cpu_online) static void pageset_update(struct per_cpu_pages *pcp, unsigned long high, unsigned long batch) { + trace_android_vh_pageset_update(&high, &batch); WRITE_ONCE(pcp->batch, batch); WRITE_ONCE(pcp->high, high); }