diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2005-07-03 12:53:25 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2005-07-03 12:53:25 -0400 |
commit | 0d670b413f042eccdffc45bafb9840244752707f (patch) | |
tree | 5658514d70f4a62ae2268f1837a3d05e3b87bfba /arch | |
parent | 75f631dc45c7327df26b82b9aea69376a306409c (diff) |
[PATCH] ARM: 2784/1: Fix the block cache flush operation range
Patch from Catalin Marinas
The range for the ARMv6 block cache operations is inclusive but the
kernel doesn't re-calculate the end address, causing a page fault when
used (this only happens with support for cache aliasing, otherwise the
blk_flush_kern_dcache_page() is not called). This patch subtracts
L1_CACHE_BYTES from the end address.
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mm/blockops.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/arm/mm/blockops.c b/arch/arm/mm/blockops.c index 806c6eeb1b0c..4f5ee2d08996 100644 --- a/arch/arm/mm/blockops.c +++ b/arch/arm/mm/blockops.c | |||
@@ -25,13 +25,14 @@ blk_flush_kern_dcache_page(void *kaddr) | |||
25 | { | 25 | { |
26 | asm( | 26 | asm( |
27 | "add r1, r0, %0 \n\ | 27 | "add r1, r0, %0 \n\ |
28 | sub r1, r1, %1 \n\ | ||
28 | 1: .word 0xec401f0e @ mcrr p15, 0, r0, r1, c14, 0 @ blocking \n\ | 29 | 1: .word 0xec401f0e @ mcrr p15, 0, r0, r1, c14, 0 @ blocking \n\ |
29 | mov r0, #0 \n\ | 30 | mov r0, #0 \n\ |
30 | mcr p15, 0, r0, c7, c5, 0 \n\ | 31 | mcr p15, 0, r0, c7, c5, 0 \n\ |
31 | mcr p15, 0, r0, c7, c10, 4 \n\ | 32 | mcr p15, 0, r0, c7, c10, 4 \n\ |
32 | mov pc, lr" | 33 | mov pc, lr" |
33 | : | 34 | : |
34 | : "I" (PAGE_SIZE)); | 35 | : "I" (PAGE_SIZE), "I" (L1_CACHE_BYTES)); |
35 | } | 36 | } |
36 | 37 | ||
37 | /* | 38 | /* |