diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 6d4f9f780f3b..b3709fc5a1ec 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -333,3 +333,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_signal); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_process_madvise_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_pageout_return_error); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_process_madvise_return_error); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_pageout_bypass); diff --git a/include/trace/hooks/madvise.h b/include/trace/hooks/madvise.h index a92912c02a21..0dbf30712a9d 100644 --- a/include/trace/hooks/madvise.h +++ b/include/trace/hooks/madvise.h @@ -17,6 +17,9 @@ DECLARE_HOOK(android_vh_madvise_pageout_return_error, DECLARE_HOOK(android_vh_process_madvise_return_error, TP_PROTO(int behavior, int ret, bool *return_error), TP_ARGS(behavior, ret, return_error)); +DECLARE_HOOK(android_vh_madvise_pageout_bypass, + TP_PROTO(struct mm_struct *mm, bool pageout, int *ret), + TP_ARGS(mm, pageout, ret)); #endif diff --git a/mm/madvise.c b/mm/madvise.c index 10fd7f23a04a..5c106c393300 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -352,10 +352,15 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd, bool pageout_anon_only_filter; unsigned int batch_count = 0; int nr; + int ret = 0; if (fatal_signal_pending(current)) return -EINTR; + trace_android_vh_madvise_pageout_bypass(mm, pageout, &ret); + if (ret) + return ret; + pageout_anon_only_filter = pageout && !vma_is_anonymous(vma) && !can_do_file_pageout(vma);