hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/mm/swapfile.c
....@@ -668,12 +668,19 @@
668668 {
669669 int nid;
670670
671
+ assert_spin_locked(&p->lock);
671672 for_each_node(nid)
672673 plist_del(&p->avail_lists[nid], &swap_avail_heads[nid]);
673674 }
674675
675676 static void del_from_avail_list(struct swap_info_struct *p)
676677 {
678
+ bool skip = false;
679
+
680
+ trace_android_vh_del_from_avail_list(p, &skip);
681
+ if (skip)
682
+ return;
683
+
677684 spin_lock(&swap_avail_lock);
678685 __del_from_avail_list(p);
679686 spin_unlock(&swap_avail_lock);
....@@ -699,6 +706,11 @@
699706 static void add_to_avail_list(struct swap_info_struct *p)
700707 {
701708 int nid;
709
+ bool skip = false;
710
+
711
+ trace_android_vh_add_to_avail_list(p, &skip);
712
+ if (skip)
713
+ return;
702714
703715 spin_lock(&swap_avail_lock);
704716 for_each_node(nid) {
....@@ -1111,6 +1123,7 @@
11111123 goto check_out;
11121124 pr_debug("scan_swap_map of si %d failed to find offset\n",
11131125 si->type);
1126
+ cond_resched();
11141127
11151128 spin_lock(&swap_avail_lock);
11161129 nextsi:
....@@ -2629,8 +2642,8 @@
26292642 spin_unlock(&swap_lock);
26302643 goto out_dput;
26312644 }
2632
- del_from_avail_list(p);
26332645 spin_lock(&p->lock);
2646
+ del_from_avail_list(p);
26342647 if (p->prio < 0) {
26352648 struct swap_info_struct *si = p;
26362649 int nid;
....@@ -3392,6 +3405,8 @@
33923405 if (swap_flags & SWAP_FLAG_PREFER)
33933406 prio =
33943407 (swap_flags & SWAP_FLAG_PRIO_MASK) >> SWAP_FLAG_PRIO_SHIFT;
3408
+
3409
+ trace_android_vh_swap_avail_heads_init(swap_avail_heads);
33953410 enable_swap_info(p, prio, swap_map, cluster_info, frontswap_map);
33963411
33973412 trace_android_vh_init_swap_info_struct(p, swap_avail_heads);
....@@ -3846,6 +3861,7 @@
38463861 {
38473862 struct swap_info_struct *si, *next;
38483863 int nid = page_to_nid(page);
3864
+ bool skip = false;
38493865
38503866 if (!(gfp_mask & __GFP_IO))
38513867 return;
....@@ -3860,6 +3876,10 @@
38603876 if (current->throttle_queue)
38613877 return;
38623878
3879
+ trace_android_vh___cgroup_throttle_swaprate(nid, &skip);
3880
+ if (skip)
3881
+ return;
3882
+
38633883 spin_lock(&swap_avail_lock);
38643884 plist_for_each_entry_safe(si, next, &swap_avail_heads[nid],
38653885 avail_lists[nid]) {