]> xenbits.xensource.com Git - people/iwj/xen.git/commitdiff
xen/mm: Align virtual address on PAGE_SIZE in iounmap
authorJulien Grall <julien.grall@linaro.org>
Fri, 10 May 2013 16:22:16 +0000 (17:22 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Mon, 13 May 2013 10:59:43 +0000 (11:59 +0100)
ioremap function can unlikely return an unaligned virtual address if
the physical address itself is unaligned on a page size.

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
[ ijc -- include asm/page.h to fix build error on x86 ]

xen/include/xen/vmap.h

index 88e5d997a092076cdedae84c55efe5c1a00a3afa..b1923dd2215c1df6b96c174d7b71b20f4657b76c 100644 (file)
@@ -2,6 +2,7 @@
 #define __XEN_VMAP_H__
 
 #include <xen/types.h>
+#include <asm/page.h>
 
 void *vm_alloc(unsigned int nr, unsigned int align);
 void vm_free(const void *);
@@ -15,7 +16,9 @@ void __iomem *ioremap(paddr_t, size_t);
 
 static inline void iounmap(void __iomem *va)
 {
-    vunmap((void __force *)va);
+    unsigned long addr = (unsigned long)(void __force *)va;
+
+    vunmap((void *)(addr & PAGE_MASK));
 }
 
 void vm_init(void);