From 75593d90969126a1d536b8bc01fc166135b9cad3 Mon Sep 17 00:00:00 2001 From: Ralf Baechle Date: Sat, 14 Jun 2008 22:22:08 +0100 Subject: [PATCH] --- yaml --- r: 98154 b: refs/heads/master c: c9c5023d83df5dc7d58830a63fd0e082120f00e3 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/mips/mm/c-r4k.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index c76805e7e117..ce3e615e900a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0c3bd83b0974238a5808d342663c6407512564d0 +refs/heads/master: c9c5023d83df5dc7d58830a63fd0e082120f00e3 diff --git a/trunk/arch/mips/mm/c-r4k.c b/trunk/arch/mips/mm/c-r4k.c index c41ea2284954..27096751ddce 100644 --- a/trunk/arch/mips/mm/c-r4k.c +++ b/trunk/arch/mips/mm/c-r4k.c @@ -446,6 +446,7 @@ static inline void local_r4k_flush_cache_page(void *args) struct page *page = pfn_to_page(fcp_args->pfn); int exec = vma->vm_flags & VM_EXEC; struct mm_struct *mm = vma->vm_mm; + int map_coherent = 0; pgd_t *pgdp; pud_t *pudp; pmd_t *pmdp; @@ -479,7 +480,9 @@ static inline void local_r4k_flush_cache_page(void *args) * Use kmap_coherent or kmap_atomic to do flushes for * another ASID than the current one. */ - if (cpu_has_dc_aliases) + map_coherent = (cpu_has_dc_aliases && + page_mapped(page) && !Page_dcache_dirty(page)); + if (map_coherent) vaddr = kmap_coherent(page, addr); else vaddr = kmap_atomic(page, KM_USER0); @@ -502,7 +505,7 @@ static inline void local_r4k_flush_cache_page(void *args) } if (vaddr) { - if (cpu_has_dc_aliases) + if (map_coherent) kunmap_coherent(); else kunmap_atomic(vaddr, KM_USER0);