Re: [PATCH v7 3/3] mm/madvise: optimize lazyfreeing with mTHP in madvise_free

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



+			nr = madvise_folio_pte_batch(addr, end, folio, pte,
+						     ptent, &any_young, &any_dirty);
+
+			if (nr < folio_nr_pages(folio)) {
+				if (folio_likely_mapped_shared(folio))
+					continue;
+
+				arch_leave_lazy_mmu_mode();
+				if (madvise_pte_split_folio(mm, pmd, addr,
+							    folio, &start_pte, &ptl))
+					nr = 0;
+				if (!start_pte)
+					break;
+				pte = start_pte;
+				arch_enter_lazy_mmu_mode();
+				continue;
+			}
+
+			if (any_young)
+				ptent = pte_mkyoung(ptent);
+			if (any_dirty)
+				ptent = pte_mkdirty(ptent);
  		}
+ if (folio_mapcount(folio) != folio_nr_pages(folio))
+			continue;

Why is this here? I thought we had previously concluded to only do this test
inside the below if statement (where you have it duplicated).

I stumbled over these same while reviewing. It's not exactly duplicate, because it's unreliable without the folio lock. It looks more like an best-effort early check.

But then, we also add it to cases where we previously wouldn't check the mapcount at all: when the folio was added to the swapcache or is already dirty.

In that case, we would even see a change for order-0 folios with that new check.

--
Cheers,

David / dhildenb





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux