On Fri, 06 Oct 2023 17:38:14 +0530 "Aneesh Kumar K.V" <aneesh.ku...@linux.ibm.com> wrote:
> Sorry that I shared a change without build testing. Here is the updated > change > > diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c > index 3ba9fe411604..e563e13ffd88 100644 > --- a/arch/powerpc/mm/pgtable.c > +++ b/arch/powerpc/mm/pgtable.c > @@ -190,29 +190,28 @@ static pte_t set_access_flags_filter(pte_t pte, struct > vm_area_struct *vma, > void set_ptes(struct mm_struct *mm, unsigned long addr, pte_t *ptep, > pte_t pte, unsigned int nr) > { > - /* > - * Make sure hardware valid bit is not set. We don't do > - * tlb flush for this update. > - */ > - VM_WARN_ON(pte_hw_valid(*ptep) && !pte_protnone(*ptep)); > - > - /* Note: mm->context.id might not yet have been assigned as > - * this context might not have been activated yet when this > - * is called. > - */ > - pte = set_pte_filter(pte); > - > /* Perform the setting of the PTE */ > - arch_enter_lazy_mmu_mode(); > for (;;) { > + > + /* > + * Make sure hardware valid bit is not set. We don't do > + * tlb flush for this update. > + */ > + VM_WARN_ON(pte_hw_valid(*ptep) && !pte_protnone(*ptep)); > + > + /* Note: mm->context.id might not yet have been assigned as > + * this context might not have been activated yet when this > + * is called. > + */ > + pte = set_pte_filter(pte); > + > + /* Perform the setting of the PTE */ > __set_pte_at(mm, addr, ptep, pte, 0); > if (--nr == 0) > break; > ptep++; > - pte = __pte(pte_val(pte) + (1UL << PTE_RPN_SHIFT)); > addr += PAGE_SIZE; > } > - arch_leave_lazy_mmu_mode(); > } > > void unmap_kernel_page(unsigned long va) It applies cleanly on top of 6.6-rc4 but it doesn't work out. I get the same Call Trace and very similar dmesg output like I posted in my last email. Regards, Erhard