From 7356f4dbc5bd40c574df94e4a0d2af0f10120d31 Mon Sep 17 00:00:00 2001 From: Tangquan Zheng Date: Thu, 7 Aug 2025 19:23:05 +0800 Subject: [PATCH] ANDROID: mm: Add vendor hook to trace wp_page_reuse Add a hook for custom vendor modules to trace wp_page_reuse behavior, This allows for monitoring of page reuse events and custom handling. Bug: 437042547 Change-Id: I0faf068acdff2f964884d3081c35d85abd5a19fa Signed-off-by: Tangquan Zheng --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 3 +++ mm/memory.c | 1 + 3 files changed, 5 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 0ee9ff2360ec..5f19d226e631 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -460,6 +460,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_split_large_folio_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_should_be_protected); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_referenced_check_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_read_fault); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wp_page_reuse); 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 8edee8a675b1..9bf35e210937 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -371,6 +371,9 @@ DECLARE_HOOK(android_vh_page_should_be_protected, DECLARE_HOOK(android_vh_do_read_fault, TP_PROTO(struct vm_fault *vmf, unsigned long fault_around_bytes), TP_ARGS(vmf, fault_around_bytes)); +DECLARE_HOOK(android_vh_wp_page_reuse, + TP_PROTO(struct vm_fault *vmf, struct folio *folio), + TP_ARGS(vmf, folio)); DECLARE_HOOK(android_vh_filemap_read, TP_PROTO(struct file *file, loff_t pos, size_t size), TP_ARGS(file, pos, size)); diff --git a/mm/memory.c b/mm/memory.c index 5ed0097a6128..bcee414a7fba 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3284,6 +3284,7 @@ static inline void wp_page_reuse(struct vm_fault *vmf, struct folio *folio) flush_cache_page(vma, vmf->address, pte_pfn(vmf->orig_pte)); entry = pte_mkyoung(vmf->orig_pte); entry = maybe_mkwrite(pte_mkdirty(entry), vma); + trace_android_vh_wp_page_reuse(vmf, folio); if (ptep_set_access_flags(vma, vmf->address, vmf->pte, entry, 1)) update_mmu_cache_range(vmf, vma, vmf->address, vmf->pte, 1); pte_unmap_unlock(vmf->pte, vmf->ptl);