diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index a705333dc1b3..0e9014adf5f6 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -341,3 +341,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_alloc_pages_direct_reclaim_enter); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_alloc_pages_direct_reclaim_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_alloc_pages_may_oom_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vmscan_kswapd_done); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_compaction_begin); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_compaction_end); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 254da451178e..7018cc8240c3 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -12,6 +12,7 @@ struct shmem_inode_info; struct folio; struct page_vma_mapped_walk; +struct compact_control; DECLARE_RESTRICTED_HOOK(android_rvh_shmem_get_folio, TP_PROTO(struct shmem_inode_info *info, struct folio **folio), @@ -106,6 +107,12 @@ DECLARE_HOOK(android_vh_madvise_cold_pageout_skip, TP_PROTO(struct vm_area_struct *vma, struct page *page, bool pageout, bool *need_skip), TP_ARGS(vma, page, pageout, need_skip)); +DECLARE_HOOK(android_vh_mm_compaction_begin, + TP_PROTO(struct compact_control *cc, long *vendor_ret), + TP_ARGS(cc, vendor_ret)); +DECLARE_HOOK(android_vh_mm_compaction_end, + TP_PROTO(struct compact_control *cc, long vendor_ret), + TP_ARGS(cc, vendor_ret)); struct mem_cgroup; DECLARE_HOOK(android_vh_mem_cgroup_alloc, TP_PROTO(struct mem_cgroup *memcg), diff --git a/mm/compaction.c b/mm/compaction.c index 4fd76f427e29..b9a67520d442 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -51,6 +51,7 @@ static inline void count_compact_events(enum vm_event_item item, long delta) #include #undef CREATE_TRACE_POINTS #include +#include #define block_start_pfn(pfn, order) round_down(pfn, 1UL << (order)) #define block_end_pfn(pfn, order) ALIGN((pfn) + 1, 1UL << (order)) @@ -2323,6 +2324,7 @@ compact_zone(struct compact_control *cc, struct capture_control *capc) const bool sync = cc->mode != MIGRATE_ASYNC; bool update_cached; unsigned int nr_succeeded = 0; + long vendor_ret; /* * These counters track activities during zone compaction. Initialize @@ -2393,6 +2395,7 @@ compact_zone(struct compact_control *cc, struct capture_control *capc) cc->zone->compact_cached_migrate_pfn[0] == cc->zone->compact_cached_migrate_pfn[1]; trace_mm_compaction_begin(cc, start_pfn, end_pfn, sync); + trace_android_vh_mm_compaction_begin(cc, &vendor_ret); /* lru_add_drain_all could be expensive with involving other CPUs */ lru_add_drain(); @@ -2518,6 +2521,7 @@ compact_zone(struct compact_control *cc, struct capture_control *capc) count_compact_events(COMPACTMIGRATE_SCANNED, cc->total_migrate_scanned); count_compact_events(COMPACTFREE_SCANNED, cc->total_free_scanned); + trace_android_vh_mm_compaction_end(cc, vendor_ret); trace_mm_compaction_end(cc, start_pfn, end_pfn, sync, ret); return ret;