Patchwork MIPS: Fix get_user_page_fast() for mips with cache alias

login
register
mail settings
Submitter Kamal Dasu
Date June 14, 2013, 6:10 p.m.
Message ID <->
Download mbox | patch
Permalink /patch/5469/
State Accepted
Delegated to: Ralf Baechle
Headers show

Comments

Kamal Dasu - June 14, 2013, 6:10 p.m.
get_user_pages_fast() is missing cache flushes for MIPS platforms
with cache alias. 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.

Signed-off-by: Kamal Dasu <>
---
 arch/mips/mm/gup.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
root - June 18, 2013, 4:47 p.m.
On Fri, Jun 14, 2013 at 02:10:03PM -0400, Kamal Dasu wrote:

> get_user_pages_fast() is missing cache flushes for MIPS platforms
> with cache alias. 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.

A bit unsatisfying to always fall back to the slow variant yet I like
the patch because of it's simplicity but I wonder if there's not a
better solution.

  Ralf
Kevin Cernekee - July 19, 2013, 3:34 p.m.
On Tue, Jun 18, 2013 at 9:47 AM, Ralf Baechle <> wrote:
> On Fri, Jun 14, 2013 at 02:10:03PM -0400, Kamal Dasu wrote:
>
>> get_user_pages_fast() is missing cache flushes for MIPS platforms
>> with cache alias. 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.
>
> A bit unsatisfying to always fall back to the slow variant yet I like
> the patch because of it's simplicity but I wonder if there's not a
> better solution.

Hi Ralf,

What are your thoughts on pushing this fix to the stable tree for
3.4+?  Without Kamal's patch, ntfs-3g is completely broken on MIPS
platforms that have cache aliases.

Thanks.

Patch

diff --git a/arch/mips/mm/gup.c b/arch/mips/mm/gup.c
index d4ea5c9..346fb7e 100644
--- a/arch/mips/mm/gup.c
+++ b/arch/mips/mm/gup.c
@@ -273,7 +273,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' */