Thread (43 messages) 43 messages, 5 authors, 2024-04-24

Re: [PATCH v1 05/18] mm: improve folio_likely_mapped_shared() using the mapcount of large folios

From: Yin, Fengwei <hidden>
Date: 2024-04-19 02:30:00
Also in: cgroups, linux-doc, linux-fsdevel, linux-mm, linux-sh, lkml


On 4/10/2024 3:22 AM, David Hildenbrand wrote:
quoted hunk ↗ jump to hunk
@@ -2200,7 +2200,22 @@ static inline size_t folio_size(struct folio *folio)
   */
  static inline bool folio_likely_mapped_shared(struct folio *folio)
  {
-	return page_mapcount(folio_page(folio, 0)) > 1;
+	int mapcount = folio_mapcount(folio);
+
+	/* Only partially-mappable folios require more care. */
+	if (!folio_test_large(folio) || unlikely(folio_test_hugetlb(folio)))
+		return mapcount > 1;
My understanding is that mapcount > folio_nr_pages(folio) can cover
order 0 folio. And also folio_entire_mapcount() can cover hugetlb (I am
not 100% sure for this one).  I am wondering whether we can drop above
two lines? Thanks.


Regards
Yin, Fengwei
+
+	/* A single mapping implies "mapped exclusively". */
+	if (mapcount <= 1)
+		return false;
+
+	/* If any page is mapped more than once we treat it "mapped shared". */
+	if (folio_entire_mapcount(folio) || mapcount > folio_nr_pages(folio))
+		return true;
+
+	/* Let's guess based on the first subpage. */
+	return atomic_read(&folio->_mapcount) > 0;
  }
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help