From 6579112b580b27c956836336526630e0876114fd Mon Sep 17 00:00:00 2001 From: Sooyong Suk Date: Thu, 1 Aug 2024 14:18:01 +0900 Subject: [PATCH] ANDROID: page_alloc: add new vendor hook to try alloc pages with gfp Add new vendor hook to get pages with gfp from vendor implemented pool. Vendor hook trace_android_rvh_try_alloc_pages() was previously added via https://android-review.googlesource.com/c/kernel/common/+/3184382. But there were missing gfp_t in the commit, which is needed for page allocation. So add a new vendor hook with gfp. Bug: 351175506 Change-Id: I64b382b8d6d528d58146f32ebabe2883234f2653 Signed-off-by: Sooyong Suk --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 4 ++++ mm/page_alloc.c | 3 +++ 3 files changed, 8 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 9248ec555147..3daab3de4cd3 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -340,3 +340,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_split_large_folio_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_read_fault); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_read); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_map_pages); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_try_alloc_pages_gfp); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 775bf6294d19..7ec92a88648c 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -16,6 +16,10 @@ struct folio_batch; DECLARE_RESTRICTED_HOOK(android_rvh_shmem_get_folio, TP_PROTO(struct shmem_inode_info *info, struct folio **folio), TP_ARGS(info, folio), 2); +DECLARE_RESTRICTED_HOOK(android_rvh_try_alloc_pages_gfp, + TP_PROTO(struct page **page, unsigned int order, + gfp_t gfp, enum zone_type highest_zoneidx), + TP_ARGS(page, order, gfp, highest_zoneidx), 1); /* diff --git a/mm/page_alloc.c b/mm/page_alloc.c index ea5fbc447632..245a1b064d64 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -5013,6 +5013,9 @@ struct page *__alloc_pages_noprof(gfp_t gfp, unsigned int order, &alloc_gfp, &alloc_flags)) return NULL; + trace_android_rvh_try_alloc_pages_gfp(&page, order, gfp, gfp_zone(gfp)); + if (page) + goto out; /* * Forbid the first pass from falling back to types that fragment * memory until all local zones are considered.