ANDROID: vendor_hooks: Add hooks for lookaround

Add hooks for support lookaround in memory reclamation.

- android_vh_test_clear_look_around_ref
- android_vh_check_folio_look_around_ref
- android_vh_look_around_migrate_folio
- android_vh_look_around

Bug: 292051411

Signed-off-by: Peifeng Li <lipeifeng@oppo.com>
Change-Id: I9a606ae71d2f1303df3b02403b30bc8fdc9d06dd
(cherry picked from commit f50f24e781738c8e5aa9f285d8726202f33107d6)
[huzhanyuan: changed page to folio where appropriate]
This commit is contained in:
Peifeng Li 2022-09-13 19:07:41 +08:00 committed by Todd Kjos
parent 29e2f3e3d1
commit c3d26e2b5a
7 changed files with 32 additions and 0 deletions

View File

@ -315,3 +315,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue_smallest_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_one_page_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_regmap_update);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_enable_thermal_genl_check);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_folio_look_around_ref);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_look_around);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_look_around_migrate_folio);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_test_clear_look_around_ref);

View File

@ -11,6 +11,7 @@
struct shmem_inode_info;
struct folio;
struct page_vma_mapped_walk;
DECLARE_RESTRICTED_HOOK(android_rvh_shmem_get_folio,
TP_PROTO(struct shmem_inode_info *info, struct folio **folio),
@ -129,6 +130,16 @@ DECLARE_HOOK(android_vh_free_one_page_bypass,
TP_PROTO(struct page *page, struct zone *zone, int order, int migratetype,
int fpi_flags, bool *bypass),
TP_ARGS(page, zone, order, migratetype, fpi_flags, bypass));
DECLARE_HOOK(android_vh_test_clear_look_around_ref,
TP_PROTO(struct page *page),
TP_ARGS(page));
DECLARE_HOOK(android_vh_look_around_migrate_folio,
TP_PROTO(struct folio *old_folio, struct folio *new_folio),
TP_ARGS(old_folio, new_folio));
DECLARE_HOOK(android_vh_look_around,
TP_PROTO(struct page_vma_mapped_walk *pvmw, struct folio *folio,
struct vm_area_struct *vma, int *referenced),
TP_ARGS(pvmw, folio, vma, referenced));
#endif /* _TRACE_HOOK_MM_H */

View File

@ -36,6 +36,9 @@ DECLARE_HOOK(android_vh_should_continue_reclaim,
DECLARE_HOOK(android_vh_file_is_tiny_bypass,
TP_PROTO(bool file_is_tiny, bool *bypass),
TP_ARGS(file_is_tiny, bypass));
DECLARE_HOOK(android_vh_check_folio_look_around_ref,
TP_PROTO(struct folio *folio, int *skip),
TP_ARGS(folio, skip));
#endif /* _TRACE_HOOK_VMSCAN_H */
/* This part must be outside protection */
#include <trace/define_trace.h>

View File

@ -56,6 +56,10 @@
#include <trace/events/migrate.h>
#undef CREATE_TRACE_POINTS
#include <trace/hooks/mm.h>
#include <trace/hooks/vmscan.h>
#include "internal.h"
int isolate_movable_page(struct page *page, isolate_mode_t mode)
@ -554,6 +558,8 @@ void folio_migrate_flags(struct folio *newfolio, struct folio *folio)
if (folio_test_mappedtodisk(folio))
folio_set_mappedtodisk(newfolio);
trace_android_vh_look_around_migrate_folio(folio, newfolio);
/* Move dirty on pages not done by folio_migrate_mapping() */
if (folio_test_dirty(folio))
folio_set_dirty(newfolio);

View File

@ -77,6 +77,7 @@
#include <linux/buffer_head.h>
#include <linux/delayacct.h>
#include <trace/hooks/mm.h>
#include <trace/hooks/vmscan.h>
#include <asm/sections.h>
#include <asm/tlbflush.h>
@ -2600,6 +2601,7 @@ static void prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags
set_page_pfmemalloc(page);
else
clear_page_pfmemalloc(page);
trace_android_vh_test_clear_look_around_ref(page);
}
/*

View File

@ -826,6 +826,7 @@ static bool folio_referenced_one(struct folio *folio,
}
if (pvmw.pte) {
trace_android_vh_look_around(&pvmw, folio, vma, &referenced);
if (lru_gen_enabled() && pte_young(*pvmw.pte)) {
lru_gen_look_around(&pvmw);
referenced++;

View File

@ -1468,6 +1468,11 @@ static enum folio_references folio_check_references(struct folio *folio,
{
int referenced_ptes, referenced_folio;
unsigned long vm_flags;
int ret = 0;
trace_android_vh_check_folio_look_around_ref(folio, &ret);
if (ret)
return ret;
referenced_ptes = folio_referenced(folio, 1, sc->target_mem_cgroup,
&vm_flags);