From 1429c3c9ab2f0801b233d85644ea66fb4664b53a Mon Sep 17 00:00:00 2001 From: Charan Teja Kalla Date: Fri, 17 Mar 2023 11:59:58 +0530 Subject: [PATCH] ANDROID: mm/shmem: Add a trace hook to get the shmem folio Add a trace hook whose callback be used to fill the folio that can be used for shmem fs. This VH also takes the 'shmem_inode_info' which can contain the vendor specific data. The hook is used for drivers who may want to manage the pages of shmem files on their own and do memory allocation optimizations. Bug: 273448633 Change-Id: Ia48480bba6dba1ee37a3297b69fd61877dae8dc9 Signed-off-by: Charan Teja Kalla (cherry picked from commit 3f5a502bcc6eab646bf1bac4f226960a08bcab06) Signed-off-by: Georgi Djakov --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 8 ++++++++ mm/shmem.c | 9 ++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) 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;