From ff8496749db9c34c8a8c0056e4701e2c4a693bd7 Mon Sep 17 00:00:00 2001 From: chenzhiwei Date: Thu, 22 Jun 2023 14:39:09 +0800 Subject: [PATCH] ANDROID: vendor_hooks: vendor hook for MM 2 Vendor hooks add: trace_android_vh_free_one_page_bypass trace_android_vh_rmqueue_smallest_bypass Add vendor hook points in __free_one_page and __rmqueue to manager some customized pages instead of freeing/allocating. Bug: 286350069 Change-Id: If63e164c02a279f4f14ebd8603f49c58ba0fbc8a Signed-off-by: chenzhiwei --- drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/mm.h | 7 +++++++ mm/page_alloc.c | 13 ++++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index c2af4cefe2f6..37aa4bba1726 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -307,3 +307,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_init_aes_encrypt); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_skip_swap_map_write); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_post_image_save); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_cold_pageout_skip); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue_smallest_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_one_page_bypass); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index fb0bc38380fa..cf27ab461c4e 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -122,6 +122,13 @@ DECLARE_HOOK(android_vh_mem_cgroup_css_online, DECLARE_HOOK(android_vh_mem_cgroup_css_offline, TP_PROTO(struct cgroup_subsys_state *css, struct mem_cgroup *memcg), TP_ARGS(css, memcg)); +DECLARE_HOOK(android_vh_rmqueue_smallest_bypass, + TP_PROTO(struct page **page, struct zone *zone, int order, int migratetype), + TP_ARGS(page, zone, order, migratetype)); +DECLARE_HOOK(android_vh_free_one_page_bypass, + TP_PROTO(struct page *page, struct zone *zone, int order, int migratetype, + int fpi_flags, bool *bypass), + TP_ARGS(page, zone, order, migratetype, fpi_flags, bypass)); #endif /* _TRACE_HOOK_MM_H */ diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 856b0009b21f..c6358579527e 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1141,6 +1141,13 @@ static inline void __free_one_page(struct page *page, unsigned long combined_pfn; struct page *buddy; bool to_tail; + bool bypass = false; + + trace_android_vh_free_one_page_bypass(page, zone, order, + migratetype, (int)fpi_flags, &bypass); + + if (bypass) + return; VM_BUG_ON(!zone_is_initialized(zone)); VM_BUG_ON_PAGE(page->flags & PAGE_FLAGS_CHECK_AT_PREP, page); @@ -3129,7 +3136,11 @@ static __always_inline struct page * __rmqueue(struct zone *zone, unsigned int order, int migratetype, unsigned int alloc_flags) { - struct page *page; + struct page *page = NULL; + + trace_android_vh_rmqueue_smallest_bypass(&page, zone, order, migratetype); + if (page) + return page; retry: page = __rmqueue_smallest(zone, order, migratetype);