From 8d9c81d3ca37b08039e2695f0a16f35d962406cb Mon Sep 17 00:00:00 2001 From: xiaofeng Date: Thu, 30 May 2024 11:10:47 +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 Signed-off-by: xiaofeng --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 3 +++ mm/madvise.c | 7 +++++++ 3 files changed, 11 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 150d841da5ce..945b551621a5 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -521,3 +521,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_direct_reclaim_enter); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_direct_reclaim_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_may_oom_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_calculate_totalreserve_pages); +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 cfc8346ebd19..92439e137ab0 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -49,6 +49,9 @@ DECLARE_RESTRICTED_HOOK(android_rvh_bitmap_find_best_next_area, bool status), TP_ARGS(bitmap, bitmap_maxno, start, bitmap_count, mask, offset, bitmap_no, status), 1); +DECLARE_HOOK(android_vh_madvise_cold_pageout_skip, + TP_PROTO(struct vm_area_struct *vma, struct folio *folio, bool pageout, bool *need_skip), + TP_ARGS(vma, folio, pageout, need_skip)); /* DECLARE_RESTRICTED_HOOK(android_rvh_set_skip_swapcache_flags, diff --git a/mm/madvise.c b/mm/madvise.c index 6a4d7a578b30..9798fcfda6c8 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -447,6 +447,7 @@ restart: flush_tlb_batched_pending(mm); arch_enter_lazy_mmu_mode(); for (; addr < end; pte += nr, addr += nr * PAGE_SIZE) { + bool need_skip = false; nr = 1; ptent = ptep_get(pte); @@ -470,6 +471,12 @@ restart: if (!folio || folio_is_zone_device(folio)) continue; + trace_android_vh_madvise_cold_pageout_skip(vma, folio, pageout, + &need_skip); + + if (need_skip) + continue; + /* * If we encounter a large folio, only split it if it is not * fully mapped within the range we are operating on. Otherwise