diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index d658ee5c837c..fb9a157f7a51 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -344,6 +344,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_ctl_dirty_rate); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_hibernation_swap); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_cpu_resume); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_hib_resume_bdev); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_flags_cma_adjust); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue_cma_fallback); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_encrypt_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_init_aes_encrypt); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_skip_swap_map_write); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 776ede13ae0c..e4b5e99e0472 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -282,6 +282,12 @@ 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_alloc_flags_cma_adjust, + TP_PROTO(gfp_t gfp_mask, unsigned int *alloc_flags), + TP_ARGS(gfp_mask, alloc_flags)); +DECLARE_HOOK(android_vh_rmqueue_cma_fallback, + TP_PROTO(struct zone *zone, unsigned int order, struct page **page), + TP_ARGS(zone, order, page)); #endif /* _TRACE_HOOK_MM_H */ /* This part must be outside protection */ diff --git a/mm/page_alloc.c b/mm/page_alloc.c index a2b942088ea3..c9046cc86af1 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3165,6 +3165,12 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype, retry: page = __rmqueue_smallest(zone, order, migratetype); + /* + * let normal GFP_MOVABLE has chance to try MIGRATE_CMA + */ + if (unlikely(!page) && (migratetype == MIGRATE_MOVABLE)) + trace_android_vh_rmqueue_cma_fallback(zone, order, &page); + if (unlikely(!page) && __rmqueue_fallback(zone, order, migratetype, alloc_flags)) goto retry; @@ -4295,6 +4301,7 @@ static inline unsigned int gfp_to_alloc_flags_cma(gfp_t gfp_mask, #ifdef CONFIG_CMA if (gfp_migratetype(gfp_mask) == MIGRATE_MOVABLE && gfp_mask & __GFP_CMA) alloc_flags |= ALLOC_CMA; + trace_android_vh_alloc_flags_cma_adjust(gfp_mask, &alloc_flags); #endif return alloc_flags; }