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:
parent
29e2f3e3d1
commit
c3d26e2b5a
@ -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);
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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++;
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user