diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index ae35b2a9ec8b..81334ada8a61 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -488,6 +488,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_look_around); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_look_around_migrate_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_test_clear_look_around_ref); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dma_buf_stats_teardown); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_cold_or_pageout_abort); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_compact_finished); /* * For type visibility */ diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 7a1d74f646cb..480880a49d32 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -338,6 +338,12 @@ DECLARE_HOOK(android_vh_look_around, TP_PROTO(struct page_vma_mapped_walk *pvmw, struct page *page, struct vm_area_struct *vma, int *referenced), TP_ARGS(pvmw, page, vma, referenced)); +DECLARE_HOOK(android_vh_compact_finished, + TP_PROTO(bool *abort_compact), + TP_ARGS(abort_compact)); +DECLARE_HOOK(android_vh_madvise_cold_or_pageout_abort, + TP_PROTO(struct vm_area_struct *vma, bool *abort_madvise), + TP_ARGS(vma, abort_madvise)); /* macro versions of hooks are no longer required */ #endif /* _TRACE_HOOK_MM_H */ diff --git a/mm/compaction.c b/mm/compaction.c index eca4d0ea74c1..dc96fadb04da 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -45,6 +45,11 @@ static inline void count_compact_events(enum vm_event_item item, long delta) #define CREATE_TRACE_POINTS #include +#undef CREATE_TRACE_POINTS +#ifndef __GENKSYMS__ +#include +#endif + #define block_start_pfn(pfn, order) round_down(pfn, 1UL << (order)) #define block_end_pfn(pfn, order) ALIGN((pfn) + 1, 1UL << (order)) #define pageblock_start_pfn(pfn) block_start_pfn(pfn, pageblock_order) @@ -1984,6 +1989,7 @@ static enum compact_result __compact_finished(struct compact_control *cc) unsigned int order; const int migratetype = cc->migratetype; int ret; + bool abort_compact = false; /* Compaction run completes if the migrate and free scanner meet */ if (compact_scanners_met(cc)) { @@ -2083,7 +2089,8 @@ static enum compact_result __compact_finished(struct compact_control *cc) } out: - if (cc->contended || fatal_signal_pending(current)) + trace_android_vh_compact_finished(&abort_compact); + if (cc->contended || fatal_signal_pending(current) || abort_compact) ret = COMPACT_CONTENDED; return ret; diff --git a/mm/madvise.c b/mm/madvise.c index b3761ca637bb..d16fa1d8f60f 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -322,8 +322,10 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd, struct page *page = NULL; LIST_HEAD(page_list); bool allow_shared = false; + bool abort_madvise = false; - if (fatal_signal_pending(current)) + trace_android_vh_madvise_cold_or_pageout_abort(vma, &abort_madvise); + if (fatal_signal_pending(current) || abort_madvise) return -EINTR; trace_android_vh_madvise_cold_or_pageout(vma, &allow_shared);