On 27/03/2024 14:57, David Hildenbrand wrote: > On 27.03.24 15:53, Matthew Wilcox wrote: >> On Sat, Mar 23, 2024 at 12:41:36AM +1300, Barry Song wrote: >>> Commit d0637c505f8a1 ("arm64: enable THP_SWAP for arm64") brings up >>> THP_SWAP on ARM64, but it doesn't enable THP_SWP on hardware with >>> MTE as the MTE code works with the assumption tags save/restore is >>> always handling a folio with only one page. >>> >>> The limitation should be removed as more and more ARM64 SoCs have >>> this feature. Co-existence of MTE and THP_SWAP becomes more and >>> more important. >>> >>> This patch makes MTE tags saving support large folios, then we don't >>> need to split large folios into base pages for swapping out on ARM64 >>> SoCs with MTE any more. >> >> Can we go further than this patch and only support PG_mte_tagged and >> PG_mte_lock on folio->flags instead of page->flags? We're down to using > > I think we discussed that already and what I learned is that it "gets a bit > complicated". But I'm hoping we can get that discussion started again. The original conversation starts here: https://lore.kernel.org/linux-mm/fb34d312-1049-4932-8f2b-d7f33cfc297c@xxxxxxx/ The issue is that you can have a large folio mapped to user space, and user space only wants to activate MTE for a portion of it. So at that point, you either have to deal with only part of it being tagged (as we do today with the per-page flag) or you have to split the folio. I haven't re-read the entire thread - so might be forgetting some important details. > >> page->flags for these two MTE bits, a whole lot of s390 junk, PG_hwpoison, >> PG_head, PG_anon_exclusive and Zone/Section/Node/KASAN/last_cpupid. > > ... just like PG_anon_exclusive "gets a bit complicated". Well, I think I might > have finally found a way to make it work, I'll only have to uglify fork() a bit. >