patch-2.2.18 linux/arch/arm/mm/ioremap.c
Next file: linux/arch/arm/mm/mm-armv.c
Previous file: linux/arch/arm/mm/init.c
Back to the patch index
Back to the overall index
- Lines: 55
- Date:
Fri Sep 15 23:28:37 2000
- Orig file:
v2.2.17/arch/arm/mm/ioremap.c
- Orig date:
Fri Apr 21 12:45:45 2000
diff -u --new-file --recursive --exclude-from /usr/src/exclude v2.2.17/arch/arm/mm/ioremap.c linux/arch/arm/mm/ioremap.c
@@ -28,7 +28,11 @@
* flush this - flushing the area causes the bus to lock.
*/
+#include <linux/errno.h>
#include <linux/vmalloc.h>
+
+#include <asm/page.h>
+#include <asm/pgtable.h>
#include <asm/io.h>
static inline void remap_area_pte(pte_t * pte, unsigned long address, unsigned long size,
@@ -111,23 +115,23 @@
* 'flags' are the extra L_PTE_ flags that you want to specify for this
* mapping. See include/asm-arm/proc-armv/pgtable.h for more information.
*/
-void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
+void * __ioremap(unsigned long phys_addr, size_t size, unsigned long flags)
{
void * addr;
struct vm_struct * area;
- unsigned long offset;
+ unsigned long offset, last_addr;
+
+ /* Don't allow wraparound or zero size */
+ last_addr = phys_addr + size - 1;
+ if (!size || last_addr < phys_addr)
+ return NULL;
/*
* Mappings have to be page-aligned
*/
offset = phys_addr & ~PAGE_MASK;
- size = PAGE_ALIGN(size + offset);
-
- /*
- * Don't allow mappings that wrap..
- */
- if (!size || size > phys_addr + size)
- return NULL;
+ phys_addr &= PAGE_MASK;
+ size = PAGE_ALIGN(last_addr) - phys_addr;
/*
* Ok, go for it..
@@ -143,7 +147,7 @@
return (void *) (offset + (char *)addr);
}
-void iounmap(void *addr)
+void __iounmap(void *addr)
{
- return vfree((void *) (PAGE_MASK & (unsigned long) addr));
+ vfree((void *) (PAGE_MASK & (unsigned long) addr));
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)