Messages in this thread | | | Date | Wed, 1 Feb 2023 19:01:32 +0100 | Subject | Re: [PATCH 21/46] hugetlb: use struct hugetlb_pte for walk_hugetlb_range | From | David Hildenbrand <> |
| |
>>> 1. The RFC v2 way, which is head-only, and we increment the compound >>> mapcount for each PT mapping we have. So a PTE-mapped 2M page, >>> compound_mapcount=512, subpage->_mapcount=0 (ignoring the -1 bias). >>> 2. The THP-like way. If we are fully mapping the hugetlb page with the >>> hstate-level PTE, we increment the compound mapcount, otherwise we >>> increment subpage->_mapcount. >>> 3. The RFC v1 way (the way you have suggested above), which is >>> head-only, and we increment the compound mapcount if the hstate-level >>> PTE is made present. >>> >>> With #1 and #2, there is no concern with folio_mapcount(). But with >>> #3, folio_mapcount() for a PTE-mapped 2M page mapped in a single VMA >>> would yield 1 instead of 512 (right?). That's what I mean. >> >> My 2 cents: >> >> The mapcount is primarily used (in hugetlb context) to >> >> (a) Detect if a page might be shared. mapcount > 1 implies that two >> independent page table hierarchies are mapping the page. We care about >> mapcount == 1 vs. mapcount != 1. >> >> (b) Detect if unmapping was sucessfull. We care about mapcount == 0 vs. >> mapcount != 0. >> >> For hugetlb, I don't see why we should care about the subpage mapcount >> at all. > > Agreed -- it shouldn't really matter all that much. > >> >> For (a) it's even good to count "somehow mapped into a single page table >> structure" as "mapcount == 1" For (b), we don't care as long as "still >> mapped" implies "mapcount != 0". > > Thanks for your thoughts, David. So it sounds like you're still > squarely in the #3 camp. :)
Well, yes. As long as we can get it implemented in a clean way ... :)
-- Thanks,
David / dhildenb
| |