mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
ANDROID: vendor_hooks: add hooks to modify pageflags
These hooks are designed to set or clear OEM reserved pageflags when the memory state may change. Bug: 336964184 Change-Id: I9cb288ef6eef7a719d4f4748d6b71010645b7d50 Signed-off-by: Xiaofeng Yuan <yuanxiaofeng@vivo.com>
This commit is contained in:
committed by
Treehugger Robot
parent
85a0c4bef6
commit
88b8a0c173
@@ -421,6 +421,11 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_read_fault);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_queue_request_and_unlock);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_fuse_request_end);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_trylock_failed);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shmem_swapin_folio);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_wp_page);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_swap_page);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_anonymous_page);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_uprobes_replace_page);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_percpu_rwsem_down_read);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_percpu_rwsem_up_write);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_percpu_rwsem_wait_complete);
|
||||
|
||||
@@ -224,6 +224,22 @@ DECLARE_HOOK(android_vh_kmalloc_large_alloced,
|
||||
DECLARE_HOOK(android_vh_tune_fault_around_bytes,
|
||||
TP_PROTO(unsigned long *fault_around_bytes),
|
||||
TP_ARGS(fault_around_bytes));
|
||||
DECLARE_HOOK(android_vh_do_anonymous_page,
|
||||
TP_PROTO(struct vm_area_struct *vma, struct page *page),
|
||||
TP_ARGS(vma, page));
|
||||
DECLARE_HOOK(android_vh_do_swap_page,
|
||||
TP_PROTO(struct folio *folio, pte_t *pte, struct vm_fault *vmf,
|
||||
swp_entry_t entry),
|
||||
TP_ARGS(folio, pte, vmf, entry));
|
||||
DECLARE_HOOK(android_vh_do_wp_page,
|
||||
TP_PROTO(struct folio *folio),
|
||||
TP_ARGS(folio));
|
||||
DECLARE_HOOK(android_vh_uprobes_replace_page,
|
||||
TP_PROTO(struct folio *new_folio, struct folio *old_folio),
|
||||
TP_ARGS(new_folio, old_folio));
|
||||
DECLARE_HOOK(android_vh_shmem_swapin_folio,
|
||||
TP_PROTO(struct folio *folio),
|
||||
TP_ARGS(folio));
|
||||
#endif /* _TRACE_HOOK_MM_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
||||
@@ -30,6 +30,9 @@
|
||||
|
||||
#include <linux/uprobes.h>
|
||||
|
||||
#undef CREATE_TRACE_POINTS
|
||||
#include <trace/hooks/mm.h>
|
||||
|
||||
#define UINSNS_PER_PAGE (PAGE_SIZE/UPROBE_XOL_SLOT_BYTES)
|
||||
#define MAX_UPROBE_XOL_SLOTS UINSNS_PER_PAGE
|
||||
|
||||
@@ -184,6 +187,7 @@ static int __replace_page(struct vm_area_struct *vma, unsigned long addr,
|
||||
folio_get(new_folio);
|
||||
page_add_new_anon_rmap(new_page, vma, addr);
|
||||
folio_add_lru_vma(new_folio, vma);
|
||||
trace_android_vh_uprobes_replace_page(new_folio, old_folio);
|
||||
} else
|
||||
/* no new page, just dec_mm_counter for old_page */
|
||||
dec_mm_counter(mm, MM_ANONPAGES);
|
||||
|
||||
@@ -82,6 +82,9 @@
|
||||
|
||||
#include <trace/events/kmem.h>
|
||||
|
||||
#undef CREATE_TRACE_POINTS
|
||||
#include <trace/hooks/mm.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/mmu_context.h>
|
||||
#include <asm/pgalloc.h>
|
||||
@@ -3494,6 +3497,7 @@ static vm_fault_t do_wp_page(struct vm_fault *vmf)
|
||||
* not dirty accountable.
|
||||
*/
|
||||
folio = page_folio(vmf->page);
|
||||
trace_android_vh_do_wp_page(folio);
|
||||
if (folio_test_anon(folio)) {
|
||||
/*
|
||||
* If the page is exclusive to this process we must reuse the
|
||||
@@ -4077,6 +4081,7 @@ vm_fault_t do_swap_page(struct vm_fault *vmf)
|
||||
inc_mm_counter_fast(vma->vm_mm, MM_ANONPAGES);
|
||||
dec_mm_counter_fast(vma->vm_mm, MM_SWAPENTS);
|
||||
pte = mk_pte(page, vma->vm_page_prot);
|
||||
trace_android_vh_do_swap_page(folio, &pte, vmf, entry);
|
||||
|
||||
/*
|
||||
* Same logic as in do_wp_page(); however, optimize for pages that are
|
||||
@@ -4232,6 +4237,7 @@ static vm_fault_t do_anonymous_page(struct vm_fault *vmf)
|
||||
*/
|
||||
__SetPageUptodate(page);
|
||||
|
||||
trace_android_vh_do_anonymous_page(vma, page);
|
||||
entry = mk_pte(page, vma->vm_page_prot);
|
||||
entry = pte_sw_mkyoung(entry);
|
||||
if (vma->vm_flags & VM_WRITE)
|
||||
|
||||
@@ -1792,6 +1792,7 @@ static int shmem_swapin_folio(struct inode *inode, pgoff_t index,
|
||||
|
||||
/* We have to do this with folio locked to prevent races */
|
||||
folio_lock(folio);
|
||||
trace_android_vh_shmem_swapin_folio(folio);
|
||||
if (!folio_test_swapcache(folio) ||
|
||||
folio_swap_entry(folio).val != swap.val ||
|
||||
!shmem_confirm_swap(mapping, index, swap)) {
|
||||
|
||||
Reference in New Issue
Block a user