From 341d5db5c04d2bc3029540df26bf614cac9ea45f Mon Sep 17 00:00:00 2001 From: Steven Walter Date: Thu, 12 Nov 2009 16:19:30 -0500 Subject: [PATCH 2/2] call flush_cache_page before copies --- src/arch/arm/mm/copypage-swl.S | 2 +- src/arch/arm/mm/copypage-v4wb.S | 2 +- src/arch/arm/mm/fault.c | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/arch/arm/mm/copypage-swl.S b/src/arch/arm/mm/copypage-swl.S index 3902393..8eec667 100644 --- a/src/arch/arm/mm/copypage-swl.S +++ b/src/arch/arm/mm/copypage-swl.S @@ -23,7 +23,7 @@ * Dcache aliasing issue. The writes will be forwarded to the write buffer, * and merged as appropriate. */ -ENTRY(v4wb_copy_user_page) +ENTRY(_v4wb_copy_user_page) stmfd sp!, {r4, r5, lr} @ 3 mov ip, #PAGE_SZ/64 @ 1 diff --git a/src/arch/arm/mm/copypage-v4wb.S b/src/arch/arm/mm/copypage-v4wb.S index 1da5b1b..48705c8 100644 --- a/src/arch/arm/mm/copypage-v4wb.S +++ b/src/arch/arm/mm/copypage-v4wb.S @@ -27,7 +27,7 @@ * instruction. If your processor does not supply this, you have to write your * own copy_user_page that does the right thing. */ -ENTRY(v4wb_copy_user_page) +ENTRY(_v4wb_copy_user_page) stmfd sp!, {r4, lr} @ 2 mov r2, #PAGE_SZ/64 @ 1 ldr r4, [r0, #0] diff --git a/src/arch/arm/mm/fault.c b/src/arch/arm/mm/fault.c index 7650ed4..02d2f35 100644 --- a/src/arch/arm/mm/fault.c +++ b/src/arch/arm/mm/fault.c @@ -18,6 +18,7 @@ #include #include #include +#include #include @@ -513,3 +514,10 @@ do_PrefetchAbort(unsigned long addr, struct pt_regs *regs) do_translation_fault(addr, 0, regs); } +extern asmlinkage void _v4wb_copy_user_page(void *to, const void *from, unsigned long user); + +void v4wb_copy_user_page (void *to, const void *from, unsigned long user, struct vm_area_struct *vma) +{ + flush_cache_page(vma, user, page_to_pfn(virt_to_page(from))); + _v4wb_copy_user_page(to, from, user); +} -- 1.6.2.3.g5bbe6