From 89a247a6384bf98144ef5588e1cdedee2973c5a4 Mon Sep 17 00:00:00 2001 From: Bing Han Date: Mon, 30 May 2022 14:54:16 +0800 Subject: [PATCH] ANDROID: vendor_hook: Add hook in __migration_entry_wait() android_vh_waiting_for_page_migration: provide a vendor hook to force not to reclaim the page under migration to a specified swap location, until the migration is finished. Bug: 234214858 Signed-off-by: Bing Han Change-Id: Iceeae91cbd912d9c44d7eac25f1299bbff547388 --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 3 +++ mm/migrate.c | 3 +++ 3 files changed, 7 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index c0855cc0692e..c581527d0397 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -410,6 +410,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_memcg_scan_type); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_handle_pte_fault_end); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cow_user_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swapin_add_anon_rmap); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_waiting_for_page_migration); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_isolated_for_reclaim); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_inactive_is_low); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_snapshot_refaults); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 3d4bcd79cd34..9433497b3c7c 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -158,6 +158,9 @@ DECLARE_HOOK(android_vh_cow_user_page, DECLARE_HOOK(android_vh_swapin_add_anon_rmap, TP_PROTO(struct vm_fault *vmf, struct page *page), TP_ARGS(vmf, page)); +DECLARE_HOOK(android_vh_waiting_for_page_migration, + TP_PROTO(struct page *page), + TP_ARGS(page)); DECLARE_HOOK(android_vh_page_isolated_for_reclaim, TP_PROTO(struct mm_struct *mm, struct page *page), TP_ARGS(mm, page)); diff --git a/mm/migrate.c b/mm/migrate.c index 26f8595de076..a3cf3d624694 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -54,6 +54,8 @@ #define CREATE_TRACE_POINTS #include +#undef CREATE_TRACE_POINTS +#include #include "internal.h" @@ -311,6 +313,7 @@ void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep, if (!get_page_unless_zero(page)) goto out; pte_unmap_unlock(ptep, ptl); + trace_android_vh_waiting_for_page_migration(page); put_and_wait_on_page_locked(page); return; out: