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);