提交 c9c5023d 编写于 作者: R Ralf Baechle

[MIPS] Fix buggy use of kmap_coherent.

Assuming the call of kmap_coherent in local_r4k_flush_cache_page doesn't
need fixing this was skipped in fcae549295bcae801ac48fc1c2030ab8cc487020.
Turns out it needed the same change after all.
Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
上级 0c3bd83b
...@@ -446,6 +446,7 @@ static inline void local_r4k_flush_cache_page(void *args) ...@@ -446,6 +446,7 @@ static inline void local_r4k_flush_cache_page(void *args)
struct page *page = pfn_to_page(fcp_args->pfn); struct page *page = pfn_to_page(fcp_args->pfn);
int exec = vma->vm_flags & VM_EXEC; int exec = vma->vm_flags & VM_EXEC;
struct mm_struct *mm = vma->vm_mm; struct mm_struct *mm = vma->vm_mm;
int map_coherent = 0;
pgd_t *pgdp; pgd_t *pgdp;
pud_t *pudp; pud_t *pudp;
pmd_t *pmdp; pmd_t *pmdp;
...@@ -479,7 +480,9 @@ static inline void local_r4k_flush_cache_page(void *args) ...@@ -479,7 +480,9 @@ static inline void local_r4k_flush_cache_page(void *args)
* Use kmap_coherent or kmap_atomic to do flushes for * Use kmap_coherent or kmap_atomic to do flushes for
* another ASID than the current one. * 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); vaddr = kmap_coherent(page, addr);
else else
vaddr = kmap_atomic(page, KM_USER0); vaddr = kmap_atomic(page, KM_USER0);
...@@ -502,7 +505,7 @@ static inline void local_r4k_flush_cache_page(void *args) ...@@ -502,7 +505,7 @@ static inline void local_r4k_flush_cache_page(void *args)
} }
if (vaddr) { if (vaddr) {
if (cpu_has_dc_aliases) if (map_coherent)
kunmap_coherent(); kunmap_coherent();
else else
kunmap_atomic(vaddr, KM_USER0); kunmap_atomic(vaddr, KM_USER0);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册