On Thu, May 20, 2021 at 01:25:50PM +0100, Catalin Marinas wrote: > On Thu, May 20, 2021 at 12:55:21PM +0100, Steven Price wrote: > > The problem I hit is one of include dependencies: > > > > is_swap_pte() is defined (as a static inline) in > > include/linux/swapops.h. However the definition depends on > > pte_none()/pte_present() which are defined in pgtable.h - so there's a > > circular dependency. > > > > Open coding is_swap_pte() in set_pte_at() works, but it's a bit ugly. > > Any ideas on how to improve on the below? > > > > if (system_supports_mte() && pte_present(pte) && > > pte_access_permitted(pte, false) && !pte_special(pte)) { > > pte_t old_pte = READ_ONCE(*ptep); > > /* > > * We only need to synchronise if the new PTE has tags enabled > > * or if swapping in (in which case another mapping may have > > * set tags in the past even if this PTE isn't tagged). > > * (!pte_none() && !pte_present()) is an open coded version of > > * is_swap_pte() > > */ > > if (pte_tagged(pte) || (!pte_none(pte) && !pte_present(pte))) > > mte_sync_tags(old_pte, pte); > > } > > That's why I avoided testing my suggestion ;). I think we should just > add !pte_none() in there with a comment that it may be a swap pte and > use the is_swap_pte() again on the mte_sync_tags() path. We already have > the pte_present() check. Correction - pte_present() checks the new pte only, we need another for the old pte. So it looks like we'll open-code is_swap_pte(). -- Catalin _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm