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.