ANDROID: mm: add vendor hook for page_cache_readahead and filemap_fault

Add a vendor hook for start/end of page_cache_readahead and filemap_fault.

Bug: 351175506
Change-Id: Ie00ff34d48db7ef85520576af8986c95d841112e
Signed-off-by: Sooyong Suk <s.suk@samsung.corp-partner.google.com>
This commit is contained in:
Sooyong Suk
2024-08-02 17:24:10 +09:00
committed by Suren Baghdasaryan
parent c4535caded
commit ce2b5c7bca
3 changed files with 28 additions and 0 deletions
+4
View File
@@ -341,3 +341,7 @@ 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);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_try_alloc_pages_gfp);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_cache_readahead_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_cache_readahead_end);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_fault_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_fault_end);
+13
View File
@@ -231,6 +231,19 @@ 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));
DECLARE_HOOK(android_vh_page_cache_readahead_start,
TP_PROTO(struct file *file, pgoff_t pgoff,
unsigned int size, bool sync),
TP_ARGS(file, pgoff, size, sync));
DECLARE_HOOK(android_vh_page_cache_readahead_end,
TP_PROTO(struct file *file, pgoff_t pgoff),
TP_ARGS(file, pgoff));
DECLARE_HOOK(android_vh_filemap_fault_start,
TP_PROTO(struct file *file, pgoff_t pgoff),
TP_ARGS(file, pgoff));
DECLARE_HOOK(android_vh_filemap_fault_end,
TP_PROTO(struct file *file, pgoff_t pgoff),
TP_ARGS(file, pgoff));
#endif /* _TRACE_HOOK_MM_H */
/* This part must be outside protection */
+11
View File
@@ -3190,7 +3190,10 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf)
if (vm_flags & VM_SEQ_READ) {
fpin = maybe_unlock_mmap_for_io(vmf, fpin);
trace_android_vh_page_cache_readahead_start(file, vmf->pgoff,
ra->ra_pages, true);
page_cache_sync_ra(&ractl, ra->ra_pages);
trace_android_vh_page_cache_readahead_end(file, vmf->pgoff);
return fpin;
}
@@ -3214,7 +3217,10 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf)
ra->size = ra->ra_pages;
ra->async_size = ra->ra_pages / 4;
ractl._index = ra->start;
trace_android_vh_page_cache_readahead_start(file, vmf->pgoff,
ra->size, true);
page_cache_ra_order(&ractl, ra, 0);
trace_android_vh_page_cache_readahead_end(file, vmf->pgoff);
return fpin;
}
@@ -3242,7 +3248,10 @@ static struct file *do_async_mmap_readahead(struct vm_fault *vmf,
if (folio_test_readahead(folio)) {
fpin = maybe_unlock_mmap_for_io(vmf, fpin);
trace_android_vh_page_cache_readahead_start(file, vmf->pgoff,
ra->ra_pages, false);
page_cache_async_ra(&ractl, folio, ra->ra_pages);
trace_android_vh_page_cache_readahead_end(file, vmf->pgoff);
}
return fpin;
}
@@ -3447,7 +3456,9 @@ page_not_uptodate:
* and we need to check for errors.
*/
fpin = maybe_unlock_mmap_for_io(vmf, fpin);
trace_android_vh_filemap_fault_start(file, vmf->pgoff);
error = filemap_read_folio(file, mapping->a_ops->read_folio, folio);
trace_android_vh_filemap_fault_end(file, vmf->pgoff);
if (fpin)
goto out_retry;
folio_put(folio);