From cb292062960e7857e9bf5262cbd9cdd97755781c Mon Sep 17 00:00:00 2001 From: Richard Chang Date: Wed, 2 Jul 2025 07:16:49 +0000 Subject: [PATCH] ANDROID: restricted vendor_hook: add swap_read_folio_bdev_sync Add restricted vendor hook to optimize the swap-in latency. Rename swap_readpage_bdev_sync to swap_read_folio_bdev_sync to align with the upstream function name. Bug: 436973821 (cherry picked from commit 6d61bc2d2d7fcb6e4eef25e5182563b0ae79e4c3) Change-Id: I1a2be1a309769590cb427e13762e29d8c8fa9cf6 Signed-off-by: Richard Chang --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 4 ++++ mm/page_io.c | 9 +++++++++ 3 files changed, 14 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 8b1388e201d4..c37917496b88 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -571,6 +571,7 @@ 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_swap_writepage); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_swap_read_folio_bdev_sync); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_node_memcgs); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmap_region); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_try_to_unmap_one); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index fd8aaf64f261..eed10d8666f0 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -538,6 +538,10 @@ DECLARE_HOOK(android_vh_shmem_swapin_folio, DECLARE_HOOK(android_vh_swap_writepage, TP_PROTO(unsigned long *sis_flags, struct page *page), TP_ARGS(sis_flags, page)); +DECLARE_RESTRICTED_HOOK(android_rvh_swap_read_folio_bdev_sync, + TP_PROTO(struct block_device *bdev, sector_t sector, + struct page *page, bool *read), + TP_ARGS(bdev, sector, page, read), 4); DECLARE_HOOK(android_vh_mmap_region, TP_PROTO(struct vm_area_struct *vma, unsigned long addr), TP_ARGS(vma, addr)); diff --git a/mm/page_io.c b/mm/page_io.c index dbc50cab094d..836125b6ef50 100644 --- a/mm/page_io.c +++ b/mm/page_io.c @@ -583,6 +583,15 @@ static void swap_read_folio_bdev_sync(struct folio *folio, { struct bio_vec bv; struct bio bio; + bool read = false; + + trace_android_rvh_swap_read_folio_bdev_sync(sis->bdev, + swap_folio_sector(folio) + get_start_sect(sis->bdev), + &folio->page, &read); + if (read) { + count_vm_events(PSWPIN, folio_nr_pages(folio)); + return; + } bio_init(&bio, sis->bdev, &bv, 1, REQ_OP_READ); bio.bi_iter.bi_sector = swap_folio_sector(folio);