On 2025-03-02 15:55, Ryan Roberts wrote: > With commit 1a10a44dfc1d ("sparc64: implement the new page table range > API") set_ptes was added to the sparc architecture. The implementation > included calling arch_enter/leave_lazy_mmu() calls. > > The patch removes the usage of arch_enter/leave_lazy_mmu() since this > implies nesting of lazy mmu regions which is not supported. Without this > fix, lazy mmu mode is effectively disabled because we exit the mode > after the first set_ptes: > > remap_pte_range() > -> arch_enter_lazy_mmu() > -> set_ptes() > -> arch_enter_lazy_mmu() > -> arch_leave_lazy_mmu() > -> arch_leave_lazy_mmu() > > Powerpc suffered the same problem and fixed it in a corresponding way > with commit 47b8def9358c ("powerpc/mm: Avoid calling > arch_enter/leave_lazy_mmu() in set_ptes"). > > Fixes: 1a10a44dfc1d ("sparc64: implement the new page table range API") > Signed-off-by: Ryan Roberts <ryan.roberts@xxxxxxx> > --- > arch/sparc/include/asm/pgtable_64.h | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h > index 2b7f358762c1..dc28f2c4eee3 100644 > --- a/arch/sparc/include/asm/pgtable_64.h > +++ b/arch/sparc/include/asm/pgtable_64.h > @@ -936,7 +936,6 @@ static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr, > static inline void set_ptes(struct mm_struct *mm, unsigned long addr, > pte_t *ptep, pte_t pte, unsigned int nr) > { > - arch_enter_lazy_mmu_mode(); > for (;;) { > __set_pte_at(mm, addr, ptep, pte, 0); > if (--nr == 0) > @@ -945,7 +944,6 @@ static inline void set_ptes(struct mm_struct *mm, unsigned long addr, > pte_val(pte) += PAGE_SIZE; > addr += PAGE_SIZE; > } > - arch_leave_lazy_mmu_mode(); > } > #define set_ptes set_ptes Acked-by: Andreas Larsson <andreas@xxxxxxxxxxx> Thanks, Andreas