diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 241089d761a9fdf9b06a62428be83c6b962c2b40..209809a1f33878d4e2122f8aa4684f017ca7ecad 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -208,6 +208,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kvmalloc_node_use_vmalloc); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_alloc_pages_retry); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_unreserve_highatomic_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue_bulk_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_reserve_highatomic_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ra_tuning_max_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_mmap_readaround); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_hw_protection_shutdown); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 5332e3675abde0e330737732967f57c544444f3b..1d8701af8809925de140d67e5862c58a79510ec7 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -154,6 +154,9 @@ DECLARE_HOOK(android_vh_rmqueue_bulk_bypass, TP_PROTO(unsigned int order, struct per_cpu_pages *pcp, int migratetype, struct list_head *list), TP_ARGS(order, pcp, migratetype, list)); +DECLARE_HOOK(android_vh_reserve_highatomic_bypass, + TP_PROTO(struct page *page, bool *bypass), + TP_ARGS(page, bypass)); DECLARE_HOOK(android_vh_ra_tuning_max_page, TP_PROTO(struct readahead_control *ractl, unsigned long *max_page), TP_ARGS(ractl, max_page)); diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 6bd46561a6e5e8fe0604d8a189e3afcb9a357bde..3cc3009ab95bf50b2023c1527c271a657fe0be02 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2074,6 +2074,7 @@ static void reserve_highatomic_pageblock(struct page *page, struct zone *zone) { int mt; unsigned long max_managed, flags; + bool bypass = false; /* * The number reserved as: minimum is 1 pageblock, maximum is @@ -2086,6 +2087,9 @@ static void reserve_highatomic_pageblock(struct page *page, struct zone *zone) max_managed = ALIGN((zone_managed_pages(zone) / 100), pageblock_nr_pages); if (zone->nr_reserved_highatomic >= max_managed) return; + trace_android_vh_reserve_highatomic_bypass(page, &bypass); + if (bypass) + return; spin_lock_irqsave(&zone->lock, flags);