ANDROID: vendor_hooks: add hook when adding or deleting folios

Introducing vendor hooks during the addition or deletion of folios aims
to manage specific folios within a dedicated list, thereby ensuring a
more precise memory reclamation process.

Bug: 381203903
Bug: 411576684
Change-Id: Id0a2cd558eff2bbcef6fd49d7615fce51a6856e3
Signed-off-by: Yang Yang <yang.yang@vivo.com>
(cherry picked from commit 83b91498d3574a5f5388f3f2babdac27e2b38685)
Signed-off-by: ying zuxin <11154159@vivo.com>
This commit is contained in:
Yang Yang
2024-11-27 18:00:17 +08:00
committed by Carlos Llamas
parent 3ccf388466
commit 8529ec391e
3 changed files with 28 additions and 0 deletions

View File

@@ -378,6 +378,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_flush_work_wait_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_flush_work_wait_finish);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_fuse_request_send);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_fuse_request_end);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_lruvec_add_folio);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_lruvec_del_folio);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_sock_error);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_fastsyn);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_state_change);

View File

@@ -10,6 +10,9 @@
#include <linux/userfaultfd_k.h>
#include <linux/swapops.h>
#undef CREATE_TRACE_POINTS
#include <trace/hooks/mm.h>
/**
* folio_is_file_lru - Should the folio be on a file LRU or anon LRU?
* @folio: The folio to test.
@@ -340,6 +343,11 @@ static __always_inline
void lruvec_add_folio(struct lruvec *lruvec, struct folio *folio)
{
enum lru_list lru = folio_lru_list(folio);
bool skip = false;
trace_android_vh_lruvec_add_folio(lruvec, folio, lru, false, &skip);
if (skip)
return;
if (lru_gen_add_folio(lruvec, folio, false))
return;
@@ -354,6 +362,11 @@ static __always_inline
void lruvec_add_folio_tail(struct lruvec *lruvec, struct folio *folio)
{
enum lru_list lru = folio_lru_list(folio);
bool skip = false;
trace_android_vh_lruvec_add_folio(lruvec, folio, lru, true, &skip);
if (skip)
return;
if (lru_gen_add_folio(lruvec, folio, true))
return;
@@ -368,6 +381,11 @@ static __always_inline
void lruvec_del_folio(struct lruvec *lruvec, struct folio *folio)
{
enum lru_list lru = folio_lru_list(folio);
bool skip = false;
trace_android_vh_lruvec_del_folio(lruvec, folio, lru, &skip);
if (skip)
return;
if (lru_gen_del_folio(lruvec, folio, false))
return;

View File

@@ -456,6 +456,14 @@ DECLARE_HOOK(android_vh_compact_finished,
DECLARE_HOOK(android_vh_madvise_cold_or_pageout_abort,
TP_PROTO(struct vm_area_struct *vma, bool *abort_madvise),
TP_ARGS(vma, abort_madvise));
DECLARE_HOOK(android_vh_lruvec_add_folio,
TP_PROTO(struct lruvec *lruvec, struct folio *folio, enum lru_list lru,
bool tail, bool *skip),
TP_ARGS(lruvec, folio, lru, tail, skip));
DECLARE_HOOK(android_vh_lruvec_del_folio,
TP_PROTO(struct lruvec *lruvec, struct folio *folio, enum lru_list lru,
bool *skip),
TP_ARGS(lruvec, folio, lru, skip));
#endif /* _TRACE_HOOK_MM_H */
/* This part must be outside protection */