summaryrefslogtreecommitdiffstats
path: root/arch/arm/mm
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2007-06-03 19:26:04 +0100
committerRussell King <rmk+kernel@arm.linux.org.uk>2007-07-12 11:13:33 +0100
commit6d78b5f9c6cf59c98d3833e09d0ed6aebd6a33d3 (patch)
treead95d89fa69f6aa452040cef60438d08e5748a46 /arch/arm/mm
parent4486b86368d72bcac76439638b36667b1c6a1360 (diff)
downloadkernel-crypto-6d78b5f9c6cf59c98d3833e09d0ed6aebd6a33d3.tar.gz
kernel-crypto-6d78b5f9c6cf59c98d3833e09d0ed6aebd6a33d3.tar.xz
kernel-crypto-6d78b5f9c6cf59c98d3833e09d0ed6aebd6a33d3.zip
[ARM] Fix bounding error in ioremap_pfn()
If size=16M offset=2K then we should map two supersections rather than just one. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mm')
-rw-r--r--arch/arm/mm/ioremap.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c
index f3ade18862a..75952779ce1 100644
--- a/arch/arm/mm/ioremap.c
+++ b/arch/arm/mm/ioremap.c
@@ -280,7 +280,10 @@ __arm_ioremap_pfn(unsigned long pfn, unsigned long offset, size_t size,
if (!type)
return NULL;
- size = PAGE_ALIGN(size);
+ /*
+ * Page align the mapping size, taking account of any offset.
+ */
+ size = PAGE_ALIGN(offset + size);
area = get_vm_area(size, VM_IOREMAP);
if (!area)
@@ -325,11 +328,6 @@ __arm_ioremap(unsigned long phys_addr, size_t size, unsigned int mtype)
if (!size || last_addr < phys_addr)
return NULL;
- /*
- * Page align the mapping size
- */
- size = PAGE_ALIGN(last_addr + 1) - phys_addr;
-
return __arm_ioremap_pfn(pfn, offset, size, mtype);
}
EXPORT_SYMBOL(__arm_ioremap);