MIPS: Fix get_user_page_fast() for mips with cache alias
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>
This commit is contained in:
@@ -12,6 +12,7 @@
|
|||||||
#include <linux/swap.h>
|
#include <linux/swap.h>
|
||||||
#include <linux/hugetlb.h>
|
#include <linux/hugetlb.h>
|
||||||
|
|
||||||
|
#include <asm/cpu-features.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
|
|
||||||
static inline pte_t gup_get_pte(pte_t *ptep)
|
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;
|
len = (unsigned long) nr_pages << PAGE_SHIFT;
|
||||||
|
|
||||||
end = start + len;
|
end = start + len;
|
||||||
if (end < start)
|
if (end < start || cpu_has_dc_aliases)
|
||||||
goto slow_irqon;
|
goto slow_irqon;
|
||||||
|
|
||||||
/* XXX: batch / limit 'nr' */
|
/* XXX: batch / limit 'nr' */
|
||||||
|
|||||||
Reference in New Issue
Block a user