aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorVitaly Bordug <vbordug@ru.mvista.com>2007-01-24 14:40:57 -0500
committerPaul Mackerras <paulus@samba.org>2007-02-06 20:00:32 -0500
commitdbbb06b7f6ae8037a5f6b4498e492791e1929635 (patch)
treea88e4458e65ea82ac1f1aa0e91c01390790375d9 /arch
parentf25222b99542bcadf1cc53cc9aa0e304849242ca (diff)
[POWERPC] 8xx: platform specific mmu updates
This is just a straight port of the same done in arch/ppc by Marcelo Tosatti. One used to be [PATCH] ppc32 8xx: update_mmu_cache() needs unconditional tlbie, commit eb07d964b4491d1bb5864cd3d7e7633ccdda9a53 In a nutshell, the board is nearly stuck without this, yet without any visible failure - being just very slow. Signed-off-by: Vitaly Bordug <vbordug@ru.mvista.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/mm/mem.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index d1c0758c5611..c85eda63d2b3 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -490,19 +490,19 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
490 !cpu_has_feature(CPU_FTR_NOEXECUTE) && 490 !cpu_has_feature(CPU_FTR_NOEXECUTE) &&
491 pfn_valid(pfn)) { 491 pfn_valid(pfn)) {
492 struct page *page = pfn_to_page(pfn); 492 struct page *page = pfn_to_page(pfn);
493#ifdef CONFIG_8xx
494 /* On 8xx, cache control instructions (particularly
495 * "dcbst" from flush_dcache_icache) fault as write
496 * operation if there is an unpopulated TLB entry
497 * for the address in question. To workaround that,
498 * we invalidate the TLB here, thus avoiding dcbst
499 * misbehaviour.
500 */
501 _tlbie(address);
502#endif
493 if (!PageReserved(page) 503 if (!PageReserved(page)
494 && !test_bit(PG_arch_1, &page->flags)) { 504 && !test_bit(PG_arch_1, &page->flags)) {
495 if (vma->vm_mm == current->active_mm) { 505 if (vma->vm_mm == current->active_mm) {
496#ifdef CONFIG_8xx
497 /* On 8xx, cache control instructions (particularly
498 * "dcbst" from flush_dcache_icache) fault as write
499 * operation if there is an unpopulated TLB entry
500 * for the address in question. To workaround that,
501 * we invalidate the TLB here, thus avoiding dcbst
502 * misbehaviour.
503 */
504 _tlbie(address);
505#endif
506 __flush_dcache_icache((void *) address); 506 __flush_dcache_icache((void *) address);
507 } else 507 } else
508 flush_dcache_icache_page(page); 508 flush_dcache_icache_page(page);