From c837e3a95d552a4fedfcc1b2ddd977c897b52972 Mon Sep 17 00:00:00 2001 From: liwei Date: Wed, 25 Oct 2023 09:45:04 +0800 Subject: [PATCH] ANDROID: vendor_hooks: add hooks for adjust kvmalloc_node alloc_flags since we can't control all kvmalloc_node callsite's gfp_flags, we add a vendor hook in kvmalloc_node to tune the reclaim behavior for some really high-order allocation Bug: 300857012 Bug: 395197442 Change-Id: I5f0c4c2921d204289911704e3a205f6a1dc50d04 Signed-off-by: liwei Signed-off-by: wengle --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 3 +++ mm/util.c | 2 ++ 3 files changed, 6 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index daa8ccd90f53..e19675951d4e 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -369,6 +369,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_warn_alloc_show_mem_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_use_vm_swappiness); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_scan_control); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_track_hash); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_adjust_kvmalloc_flags); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_signal); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_process_madvise_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_pageout_return_error); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 6516545096a0..dec2f43ef5a7 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -346,6 +346,9 @@ DECLARE_HOOK(android_vh_show_stack_hash, DECLARE_HOOK(android_vh_save_track_hash, TP_PROTO(bool alloc, struct track *p), TP_ARGS(alloc, p)); +DECLARE_HOOK(android_vh_adjust_kvmalloc_flags, + TP_PROTO(unsigned int order, gfp_t *alloc_flags), + TP_ARGS(order, alloc_flags)); #endif /* _TRACE_HOOK_MM_H */ /* This part must be outside protection */ diff --git a/mm/util.c b/mm/util.c index d8c35f15593f..327165d470c5 100644 --- a/mm/util.c +++ b/mm/util.c @@ -633,6 +633,8 @@ static gfp_t kmalloc_gfp_adjust(gfp_t flags, size_t size) flags &= ~__GFP_NOFAIL; } + trace_android_vh_adjust_kvmalloc_flags(get_order(size), &flags); + return flags; }