aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/mm/pgtable_32.c1
-rw-r--r--arch/powerpc/mm/pgtable_64.c12
2 files changed, 13 insertions, 0 deletions
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
index 5b9601715289..343a87fa78b5 100644
--- a/arch/powerpc/mm/pgtable_32.c
+++ b/arch/powerpc/mm/pgtable_32.c
@@ -299,6 +299,7 @@ int map_page(unsigned long va, phys_addr_t pa, int flags)
299 set_pte_at(&init_mm, va, pg, pfn_pte(pa >> PAGE_SHIFT, 299 set_pte_at(&init_mm, va, pg, pfn_pte(pa >> PAGE_SHIFT,
300 __pgprot(flags))); 300 __pgprot(flags)));
301 } 301 }
302 smp_wmb();
302 return err; 303 return err;
303} 304}
304 305
diff --git a/arch/powerpc/mm/pgtable_64.c b/arch/powerpc/mm/pgtable_64.c
index 02e8681fb865..755138218e04 100644
--- a/arch/powerpc/mm/pgtable_64.c
+++ b/arch/powerpc/mm/pgtable_64.c
@@ -153,6 +153,18 @@ int map_kernel_page(unsigned long ea, unsigned long pa, int flags)
153 } 153 }
154#endif /* !CONFIG_PPC_MMU_NOHASH */ 154#endif /* !CONFIG_PPC_MMU_NOHASH */
155 } 155 }
156
157#ifdef CONFIG_PPC_BOOK3E_64
158 /*
159 * With hardware tablewalk, a sync is needed to ensure that
160 * subsequent accesses see the PTE we just wrote. Unlike userspace
161 * mappings, we can't tolerate spurious faults, so make sure
162 * the new PTE will be seen the first time.
163 */
164 mb();
165#else
166 smp_wmb();
167#endif
156 return 0; 168 return 0;
157} 169}
158 170