diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 532d7f5c1c04..c5ed8ffa5c3d 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -187,3 +187,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_logbuf); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_logbuf_pr_cont); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_calc_alloc_flags); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_regmap_update); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_shmem_get_folio); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 710e279e4c18..784fb33f1bfe 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -8,6 +8,14 @@ #define _TRACE_HOOK_MM_H #include + +struct shmem_inode_info; +struct folio; + +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_set_skip_swapcache_flags, diff --git a/mm/shmem.c b/mm/shmem.c index b9832bb5f87a..91ba325a24bf 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -43,6 +43,9 @@ #include #include "swap.h" +#undef CREATE_TRACE_POINTS +#include + static struct vfsmount *shm_mnt __ro_after_init; #ifdef CONFIG_SHMEM @@ -1764,10 +1767,14 @@ static struct folio *shmem_alloc_folio(gfp_t gfp, int order, { struct mempolicy *mpol; pgoff_t ilx; - struct folio *folio; + struct folio *folio = NULL; mpol = shmem_get_pgoff_policy(info, index, order, &ilx); + trace_android_rvh_shmem_get_folio(info, &folio); + if (folio) + goto done; folio = folio_alloc_mpol(gfp, order, mpol, ilx, numa_node_id()); +done: mpol_cond_put(mpol); return folio;