diff options
-rw-r--r-- | arch/powerpc/mm/pgtable_32.c | 1 | ||||
-rw-r--r-- | arch/powerpc/mm/pgtable_64.c | 12 |
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 | ||