On Wed, Mar 27, 2024 at 03:13:18PM +0000, Ryan Roberts wrote: > 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. It needs splitting since the PROT_MTE property ends up in the pte as a memory attribute. So we can't have a THP mapping with PROT_MTE but only specific pages tagged. I had an attempt last year to only keep the PG_mte_tagged flag in the head page but I recall folio_copy() got in the way since it was calling copy_highpage() on individual pages and the arm64 code was not seeing the head PG_mte_tagged. I think it can be worked around but I got distracted and forgot about this. -- Catalin