diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 80d9b589a70d..b084448fe54b 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -621,6 +621,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_group_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_migration_target_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_node_memcgs); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swap_writepage); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swap_readpage_bdev_sync); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dpm_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dpm_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sync_irq_wait_start); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index ce824f821de2..d6e6dda9075f 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -533,6 +533,10 @@ DECLARE_HOOK(android_vh_migration_target_bypass, DECLARE_HOOK(android_vh_swap_writepage, TP_PROTO(unsigned long *sis_flags, struct page *page), TP_ARGS(sis_flags, page)); +DECLARE_HOOK(android_vh_swap_readpage_bdev_sync, + TP_PROTO(struct block_device *bdev, sector_t sector, + struct page *page, bool *read), + TP_ARGS(bdev, sector, page, read)); DECLARE_HOOK(android_vh_alloc_flags_cma_adjust, TP_PROTO(gfp_t gfp_mask, unsigned int *alloc_flags), TP_ARGS(gfp_mask, alloc_flags)); diff --git a/mm/page_io.c b/mm/page_io.c index 20c36943e119..648fd53303a9 100644 --- a/mm/page_io.c +++ b/mm/page_io.c @@ -469,6 +469,15 @@ static void swap_readpage_bdev_sync(struct folio *folio, { struct bio_vec bv; struct bio bio; + bool read = false; + + trace_android_vh_swap_readpage_bdev_sync(sis->bdev, + swap_page_sector(&folio->page) + 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_page_sector(&folio->page);