mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 02:50:49 +09:00
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 f50f24e781)
[huzhanyuan: changed page to folio where appropriate]
This commit is contained in:
@@ -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_free_one_page_bypass);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_regmap_update);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_regmap_update);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_enable_thermal_genl_check);
|
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 shmem_inode_info;
|
||||||
struct folio;
|
struct folio;
|
||||||
|
struct page_vma_mapped_walk;
|
||||||
|
|
||||||
DECLARE_RESTRICTED_HOOK(android_rvh_shmem_get_folio,
|
DECLARE_RESTRICTED_HOOK(android_rvh_shmem_get_folio,
|
||||||
TP_PROTO(struct shmem_inode_info *info, struct folio **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,
|
TP_PROTO(struct page *page, struct zone *zone, int order, int migratetype,
|
||||||
int fpi_flags, bool *bypass),
|
int fpi_flags, bool *bypass),
|
||||||
TP_ARGS(page, zone, order, migratetype, fpi_flags, 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 */
|
#endif /* _TRACE_HOOK_MM_H */
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,9 @@ DECLARE_HOOK(android_vh_should_continue_reclaim,
|
|||||||
DECLARE_HOOK(android_vh_file_is_tiny_bypass,
|
DECLARE_HOOK(android_vh_file_is_tiny_bypass,
|
||||||
TP_PROTO(bool file_is_tiny, bool *bypass),
|
TP_PROTO(bool file_is_tiny, bool *bypass),
|
||||||
TP_ARGS(file_is_tiny, 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 */
|
#endif /* _TRACE_HOOK_VMSCAN_H */
|
||||||
/* This part must be outside protection */
|
/* This part must be outside protection */
|
||||||
#include <trace/define_trace.h>
|
#include <trace/define_trace.h>
|
||||||
|
|||||||
@@ -56,6 +56,10 @@
|
|||||||
|
|
||||||
#include <trace/events/migrate.h>
|
#include <trace/events/migrate.h>
|
||||||
|
|
||||||
|
#undef CREATE_TRACE_POINTS
|
||||||
|
#include <trace/hooks/mm.h>
|
||||||
|
#include <trace/hooks/vmscan.h>
|
||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
int isolate_movable_page(struct page *page, isolate_mode_t mode)
|
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))
|
if (folio_test_mappedtodisk(folio))
|
||||||
folio_set_mappedtodisk(newfolio);
|
folio_set_mappedtodisk(newfolio);
|
||||||
|
|
||||||
|
trace_android_vh_look_around_migrate_folio(folio, newfolio);
|
||||||
|
|
||||||
/* Move dirty on pages not done by folio_migrate_mapping() */
|
/* Move dirty on pages not done by folio_migrate_mapping() */
|
||||||
if (folio_test_dirty(folio))
|
if (folio_test_dirty(folio))
|
||||||
folio_set_dirty(newfolio);
|
folio_set_dirty(newfolio);
|
||||||
|
|||||||
@@ -77,6 +77,7 @@
|
|||||||
#include <linux/buffer_head.h>
|
#include <linux/buffer_head.h>
|
||||||
#include <linux/delayacct.h>
|
#include <linux/delayacct.h>
|
||||||
#include <trace/hooks/mm.h>
|
#include <trace/hooks/mm.h>
|
||||||
|
#include <trace/hooks/vmscan.h>
|
||||||
|
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/tlbflush.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);
|
set_page_pfmemalloc(page);
|
||||||
else
|
else
|
||||||
clear_page_pfmemalloc(page);
|
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) {
|
if (pvmw.pte) {
|
||||||
|
trace_android_vh_look_around(&pvmw, folio, vma, &referenced);
|
||||||
if (lru_gen_enabled() && pte_young(*pvmw.pte)) {
|
if (lru_gen_enabled() && pte_young(*pvmw.pte)) {
|
||||||
lru_gen_look_around(&pvmw);
|
lru_gen_look_around(&pvmw);
|
||||||
referenced++;
|
referenced++;
|
||||||
|
|||||||
@@ -1468,6 +1468,11 @@ static enum folio_references folio_check_references(struct folio *folio,
|
|||||||
{
|
{
|
||||||
int referenced_ptes, referenced_folio;
|
int referenced_ptes, referenced_folio;
|
||||||
unsigned long vm_flags;
|
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,
|
referenced_ptes = folio_referenced(folio, 1, sc->target_mem_cgroup,
|
||||||
&vm_flags);
|
&vm_flags);
|
||||||
|
|||||||
Reference in New Issue
Block a user