[PATCH] arm64: mte: Ensure the cleared tags are visible before setting the PTE

Catalin Marinas catalin.marinas at arm.com
Tue May 17 02:30:53 PDT 2022


On Tue, May 17, 2022 at 10:22:32AM +0100, Vladimir Murzin wrote:
> On 5/13/22 11:08, Catalin Marinas wrote:
> > @@ -72,10 +74,15 @@ void mte_sync_tags(pte_t old_pte, pte_t pte)
> >  
> >  	/* if PG_mte_tagged is set, tags have already been initialised */
> >  	for (i = 0; i < nr_pages; i++, page++) {
> > -		if (!test_and_set_bit(PG_mte_tagged, &page->flags))
> > -			mte_sync_page_tags(page, old_pte, check_swap,
> > -					   pte_is_tagged);
> > +		if (!test_and_set_bit(PG_mte_tagged, &page->flags) &&
> > +		    mte_sync_page_tags(page, old_pte, check_swap,
> > +				       pte_is_tagged))
> > +			updated = true;
> >  	}
> > +
> > +	/* ensure the tags are visible before the PTE is set */
> > +	if (updated)
> > +		smp_wmb();
> >  }
> >  
> >  int memcmp_pages(struct page *page1, struct page *page2)
> 
> Tested-by: Vladimir Murzin <vladimir.murzin at arm.com>

Thanks Vladimir. Talking to Will earlier, I'll make the smp_wmb()
unconditional, it's not worth the extra checks. I'll post the updated
version soon but I won't add your tested-by as it's slightly different
(or we add a Tested-old-version-by... ;)).

-- 
Catalin



More information about the linux-arm-kernel mailing list