]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
MIPS: Fix get_user_page_fast() for mips with cache alias
authorKamal Dasu <kdasu.kdev@gmail.com>
Fri, 14 Jun 2013 17:10:03 +0000 (17:10 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 26 Aug 2013 13:26:48 +0000 (15:26 +0200)
get_user_pages_fast() is missing cache flushes for MIPS platforms with
cache aliases.  Filesystem failures observed with DirectIO operations due
to missing flush_anon_page() that use page coloring logic to work with
cache aliases. This fix falls through to take slow_irqon path that calls
get_user_pages() that has required logic for platforms where
cpu_has_dc_aliases is true.

[ralf@linux-mips.org: Explicity include <asm/cpu-features.h>.]

Signed-off-by: Kamal Dasu <kdasu.kdev@gmail.com>
Cc: linux-mips@linux-mips.org
Patchwork: http://patchwork.linux-mips.org/patch/5469/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/mm/gup.c

index d4ea5c9c4a93add70ec6e33b1efce8ab5b810c54..06ce17c2a905af5be1bb9bae744d2f03abc64a6e 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/swap.h>
 #include <linux/hugetlb.h>
 
+#include <asm/cpu-features.h>
 #include <asm/pgtable.h>
 
 static inline pte_t gup_get_pte(pte_t *ptep)
@@ -273,7 +274,7 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write,
        len = (unsigned long) nr_pages << PAGE_SHIFT;
 
        end = start + len;
-       if (end < start)
+       if (end < start || cpu_has_dc_aliases)
                goto slow_irqon;
 
        /* XXX: batch / limit 'nr' */