On Wed, Mar 15, 2023 at 11:50:22AM +0100, Thomas Bogendoerfer wrote: > On Wed, Mar 15, 2023 at 05:14:24AM +0000, Matthew Wilcox (Oracle) wrote: > > Rename _PFN_SHIFT to PFN_PTE_SHIFT. Convert a few places > > to call set_pte() instead of set_pte_at(). Add set_ptes(), > > update_mmu_cache_range(), flush_icache_pages() and flush_dcache_folio(). > > /local/tbogendoerfer/korg/linux/mm/memory.c: In function ‘set_pte_range’: > /local/tbogendoerfer/korg/linux/mm/memory.c:4290:2: error: implicit declaration of function ‘update_mmu_cache_range’ [-Werror=implicit-function-declaration] > update_mmu_cache_range(vma, addr, vmf->pte, nr); > > update_mmu_cache_range() is missing in this patch. Oops. And mips was one of the arches I did a test build for! Looks like we could try to gain some efficiency by passing 'nr' to __update_tlb(), but as far as I can tell, that's only called for r3k and r4k, so maybe it's not worth optimising at this point? Anyway, this add-on makes the mips build compile for me and I'll fold it into v5. diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h index cfcd6a8ba8ef..9f51b0813dc6 100644 --- a/arch/mips/include/asm/pgtable.h +++ b/arch/mips/include/asm/pgtable.h @@ -578,12 +578,20 @@ static inline pte_t pte_swp_clear_exclusive(pte_t pte) extern void __update_tlb(struct vm_area_struct *vma, unsigned long address, pte_t pte); -static inline void update_mmu_cache(struct vm_area_struct *vma, - unsigned long address, pte_t *ptep) +static inline void update_mmu_cache_range(struct vm_area_struct *vma, + unsigned long address, pte_t *ptep, unsigned int nr) { - pte_t pte = *ptep; - __update_tlb(vma, address, pte); + for (;;) { + pte_t pte = *ptep; + __update_tlb(vma, address, pte); + if (--nr == 0) + break; + ptep++; + address += PAGE_SIZE; + } } +#define update_mmu_cache(vma, address, ptep) \ + update_mmu_cache_range(vma, address, ptep, 1) #define __HAVE_ARCH_UPDATE_MMU_TLB #define update_mmu_tlb update_mmu_cache