Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c9c5023d authored by Ralf Baechle's avatar Ralf Baechle
Browse files

[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: default avatarRalf Baechle <ralf@linux-mips.org>
parent 0c3bd83b
Loading
Loading
Loading
Loading
+5 −2
Original line number Original line Diff line number Diff line
@@ -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)
		 * 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)
	}
	}


	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);