diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c index d7054c186845..10cc2e6fd6c6 100644 --- a/block/blk-cgroup.c +++ b/block/blk-cgroup.c @@ -1794,6 +1794,7 @@ void blkcg_schedule_throttle(struct request_queue *q, bool use_memdelay) current->use_memdelay = use_memdelay; set_notify_resume(current); } +EXPORT_SYMBOL_GPL(blkcg_schedule_throttle); /** * blkcg_add_delay - add delay to this blkg diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 815c5efb5c22..8b1929a3a486 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -468,12 +468,16 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_free_swap_slot); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_swap_slot); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_get_swap_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_swap_page); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_add_to_avail_list); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_del_from_avail_list); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh___cgroup_throttle_swaprate); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_cold_or_pageout); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_isolated_for_reclaim); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_inactive_is_low); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_snapshot_refaults); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_account_swap_pages); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_unuse_swap_page); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swap_avail_heads_init); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_init_swap_info_struct); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_si_swapinfo); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_alloc_si); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 480880a49d32..dd980641cb27 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -287,6 +287,15 @@ DECLARE_HOOK(android_vh_get_swap_page, TP_PROTO(struct page *page, swp_entry_t *entry, struct swap_slots_cache *cache, bool *found), TP_ARGS(page, entry, cache, found)); +DECLARE_HOOK(android_vh_add_to_avail_list, + TP_PROTO(struct swap_info_struct *p, bool *skip), + TP_ARGS(p, skip)); +DECLARE_HOOK(android_vh_del_from_avail_list, + TP_PROTO(struct swap_info_struct *p, bool *skip), + TP_ARGS(p, skip)); +DECLARE_HOOK(android_vh___cgroup_throttle_swaprate, + TP_PROTO(int nid, bool *skip), + TP_ARGS(nid, skip)); DECLARE_HOOK(android_vh_madvise_cold_or_pageout, TP_PROTO(struct vm_area_struct *vma, bool *allow_shared), TP_ARGS(vma, allow_shared)); @@ -299,6 +308,9 @@ DECLARE_HOOK(android_vh_account_swap_pages, DECLARE_HOOK(android_vh_unuse_swap_page, TP_PROTO(struct swap_info_struct *si, struct page *page), TP_ARGS(si, page)); +DECLARE_HOOK(android_vh_swap_avail_heads_init, + TP_PROTO(struct plist_head *swap_avail_heads), + TP_ARGS(swap_avail_heads)); DECLARE_HOOK(android_vh_init_swap_info_struct, TP_PROTO(struct swap_info_struct *p, struct plist_head *swap_avail_heads), TP_ARGS(p, swap_avail_heads)); diff --git a/mm/swapfile.c b/mm/swapfile.c index a31d90fdb19f..cc1ce66cb492 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -675,6 +675,12 @@ static void __del_from_avail_list(struct swap_info_struct *p) static void del_from_avail_list(struct swap_info_struct *p) { + bool skip = false; + + trace_android_vh_del_from_avail_list(p, &skip); + if (skip) + return; + spin_lock(&swap_avail_lock); __del_from_avail_list(p); spin_unlock(&swap_avail_lock); @@ -700,6 +706,11 @@ static void swap_range_alloc(struct swap_info_struct *si, unsigned long offset, static void add_to_avail_list(struct swap_info_struct *p) { int nid; + bool skip = false; + + trace_android_vh_add_to_avail_list(p, &skip); + if (skip) + return; spin_lock(&swap_avail_lock); for_each_node(nid) { @@ -3394,6 +3405,8 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) if (swap_flags & SWAP_FLAG_PREFER) prio = (swap_flags & SWAP_FLAG_PRIO_MASK) >> SWAP_FLAG_PRIO_SHIFT; + + trace_android_vh_swap_avail_heads_init(swap_avail_heads); enable_swap_info(p, prio, swap_map, cluster_info, frontswap_map); trace_android_vh_init_swap_info_struct(p, swap_avail_heads); @@ -3848,6 +3861,7 @@ void __cgroup_throttle_swaprate(struct page *page, gfp_t gfp_mask) { struct swap_info_struct *si, *next; int nid = page_to_nid(page); + bool skip = false; if (!(gfp_mask & __GFP_IO)) return; @@ -3862,6 +3876,10 @@ void __cgroup_throttle_swaprate(struct page *page, gfp_t gfp_mask) if (current->throttle_queue) return; + trace_android_vh___cgroup_throttle_swaprate(nid, &skip); + if (skip) + return; + spin_lock(&swap_avail_lock); plist_for_each_entry_safe(si, next, &swap_avail_heads[nid], avail_lists[nid]) {