This diff should be correct.  My old diff removed the "idx ^="
assignment, my new diff moves it down.
--gkoehler

Index: arch/powerpc64/powerpc64/pmap.c
===================================================================
RCS file: /cvs/src/sys/arch/powerpc64/powerpc64/pmap.c,v
diff -u -p -r1.62 pmap.c
--- arch/powerpc64/powerpc64/pmap.c     4 Jun 2024 17:31:59 -0000       1.62
+++ arch/powerpc64/powerpc64/pmap.c     26 Nov 2024 04:54:47 -0000
@@ -816,8 +816,8 @@ pte_insert(struct pte_desc *pted)
                pted->pted_va &= ~(PTED_VA_HID_M|PTED_VA_PTEGIDX_M);
                pted->pted_va |= off & (PTED_VA_PTEGIDX_M|PTED_VA_HID_M);
 
-               idx ^= (PTED_HID(pted) ? pmap_ptab_mask : 0);
-               pte = pmap_ptable + (idx * 8);
+               pte = pmap_ptable;
+               pte += (idx ^ (PTED_HID(pted) ? pmap_ptab_mask : 0)) * 8;
                pte += PTED_PTEGIDX(pted); /* increment by index into pteg */
 
                if ((pte->pte_hi & PTE_WIRED) == 0)
@@ -825,6 +825,7 @@ pte_insert(struct pte_desc *pted)
 
                off++;
        }
+       idx ^= (PTED_HID(pted) ? pmap_ptab_mask : 0);
        /*
         * Since we only wire unmanaged kernel mappings, we should
         * always find a slot that we can replace.

Reply via email to