From 87f8c82651925fcee86c1c3bdb4a5c6f71542ec3 Mon Sep 17 00:00:00 2001 From: zhouwenhao Date: Tue, 25 Apr 2023 11:06:46 +0800 Subject: [PATCH] ANDROID: vendor_hooks:vendor hook for madvise_cold_or_pageout_pte_range. add vendor hook in madvise_cold_or_pageout_pte_range to control the pages to be reclaimed more fine-grained. Bug: 284808098 Signed-off-by: zhouwenhao Change-Id: I298fde436df192cea9b1541d857f3a46808e06f2 --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 4 +++- mm/madvise.c | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 9dd7ca30c71c..c2af4cefe2f6 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -306,3 +306,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_encrypt_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_init_aes_encrypt); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_skip_swap_map_write); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_post_image_save); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_cold_pageout_skip); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 793cdd14a8a2..fb0bc38380fa 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -98,10 +98,12 @@ DECLARE_HOOK(android_vh_si_mem_available_adjust, DECLARE_HOOK(android_vh_si_meminfo_adjust, TP_PROTO(unsigned long *totalram, unsigned long *freeram), TP_ARGS(totalram, freeram)); - DECLARE_RESTRICTED_HOOK(android_rvh_ctl_dirty_rate, TP_PROTO(void *unused), TP_ARGS(unused), 1); +DECLARE_HOOK(android_vh_madvise_cold_pageout_skip, + TP_PROTO(struct vm_area_struct *vma, struct page *page, bool pageout, bool *need_skip), + TP_ARGS(vma, page, pageout, need_skip)); struct mem_cgroup; DECLARE_HOOK(android_vh_mem_cgroup_alloc, diff --git a/mm/madvise.c b/mm/madvise.c index e96c04dc9123..f49a62a35827 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -438,6 +438,8 @@ regular_page: flush_tlb_batched_pending(mm); arch_enter_lazy_mmu_mode(); for (; addr < end; pte++, addr += PAGE_SIZE) { + bool need_skip = false; + ptent = *pte; if (pte_none(ptent)) @@ -454,6 +456,12 @@ regular_page: if (!page || is_zone_device_page(page)) continue; + trace_android_vh_madvise_cold_pageout_skip(vma, page, pageout, + &need_skip); + + if (need_skip) + continue; + /* * Creating a THP page is expensive so split it only if we * are sure it's worth. Split it if we are only owner.