At the time being, with 16k pages __set_pte_at() writes table entries
in reverse order:

 294:   91 49 00 0c     stw     r10,12(r9)
 298:   91 49 00 08     stw     r10,8(r9)
 29c:   91 49 00 04     stw     r10,4(r9)
 2a0:   91 49 00 00     stw     r10,0(r9)

Allthough there should be no impact at all as it stays in a single
cacheline, reverse the writing in a more natural order.

 288:   91 49 00 0c     stw     r10,0(r9)
 28c:   91 49 00 08     stw     r10,4(r9)
 290:   91 49 00 04     stw     r10,8(r9)
 294:   91 49 00 00     stw     r10,12(r9)

Signed-off-by: Christophe Leroy <christophe.le...@csgroup.eu>
---
 arch/powerpc/include/asm/nohash/pgtable.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/include/asm/nohash/pgtable.h 
b/arch/powerpc/include/asm/nohash/pgtable.h
index 4fd73c7412d0..d2e39823af09 100644
--- a/arch/powerpc/include/asm/nohash/pgtable.h
+++ b/arch/powerpc/include/asm/nohash/pgtable.h
@@ -183,7 +183,7 @@ static inline void __set_pte_at(struct mm_struct *mm, 
unsigned long addr,
         * cases, and 32-bit non-hash with 32-bit PTEs.
         */
 #if defined(CONFIG_PPC_8xx) && defined(CONFIG_PPC_16K_PAGES)
-       ptep->pte = ptep->pte1 = ptep->pte2 = ptep->pte3 = pte_val(pte);
+       ptep->pte3 = ptep->pte2 = ptep->pte1 = ptep->pte = pte_val(pte);
 #else
        *ptep = pte;
 #endif
-- 
2.37.1

Reply via email to