ANDROID: mm: add vendor hook in fault and read file

Add a vendor hook to notify vendor module fault and read events.

Bug: 351175506
Change-Id: I4c46e9e00aa5f5555fd42a6b0815563497658b34
Signed-off-by: Sooyong Suk <s.suk@samsung.corp-partner.google.com>
This commit is contained in:
Sooyong Suk
2024-07-18 11:15:27 +09:00
committed by Suren Baghdasaryan
parent da27500dcc
commit c2700380df
4 changed files with 19 additions and 0 deletions
+3
View File
@@ -337,3 +337,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_pageout_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_pages_prepare_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_pages_ok_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_split_large_folio_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_read_fault);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_read);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_map_pages);
+10
View File
@@ -217,6 +217,16 @@ DECLARE_HOOK(android_vh_free_pages_ok_bypass,
DECLARE_HOOK(android_vh_split_large_folio_bypass,
TP_PROTO(bool *bypass),
TP_ARGS(bypass));
DECLARE_HOOK(android_vh_do_read_fault,
TP_PROTO(struct vm_fault *vmf, unsigned long fault_around_bytes),
TP_ARGS(vmf, fault_around_bytes));
DECLARE_HOOK(android_vh_filemap_read,
TP_PROTO(struct file *file, loff_t pos, size_t size),
TP_ARGS(file, pos, size));
DECLARE_HOOK(android_vh_filemap_map_pages,
TP_PROTO(struct file *file, pgoff_t first_pgoff,
pgoff_t last_pgoff, vm_fault_t ret),
TP_ARGS(file, first_pgoff, last_pgoff, ret));
#endif /* _TRACE_HOOK_MM_H */
/* This part must be outside protection */
+4
View File
@@ -2641,6 +2641,7 @@ ssize_t filemap_read(struct kiocb *iocb, struct iov_iter *iter,
iov_iter_truncate(iter, inode->i_sb->s_maxbytes - iocb->ki_pos);
folio_batch_init(&fbatch);
trace_android_vh_filemap_read(filp, iocb->ki_pos, iov_iter_count(iter));
do {
cond_resched();
@@ -3654,11 +3655,13 @@ vm_fault_t filemap_map_pages(struct vm_fault *vmf,
vm_fault_t ret = 0;
unsigned long rss = 0;
unsigned int nr_pages = 0, mmap_miss = 0, mmap_miss_saved, folio_type;
pgoff_t first_pgoff = 0;
rcu_read_lock();
folio = next_uptodate_folio(&xas, mapping, end_pgoff);
if (!folio)
goto out;
first_pgoff = xas.xa_index;
if (filemap_map_pmd(vmf, folio, start_pgoff)) {
ret = VM_FAULT_NOPAGE;
@@ -3709,6 +3712,7 @@ out:
WRITE_ONCE(file->f_ra.mmap_miss, 0);
else
WRITE_ONCE(file->f_ra.mmap_miss, mmap_miss_saved - mmap_miss);
trace_android_vh_filemap_map_pages(file, first_pgoff, last_pgoff, ret);
return ret;
}
+2
View File
@@ -5297,6 +5297,8 @@ static vm_fault_t do_read_fault(struct vm_fault *vmf)
ret = do_fault_around(vmf);
if (ret)
return ret;
} else {
trace_android_vh_do_read_fault(vmf, fault_around_pages);
}
ret = vmf_can_call_fault(vmf);