[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86: virt_to_mfn() fixes.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1238494874 -3600 # Node ID b8d2f08f98d035059dd39f3eaca4a78e1c1a047d # Parent 687376c92188bfd2de64bd182fc1be55d14ccbfe x86: virt_to_mfn() fixes. Signed-off-by: Xiaowei Yang <xiaowei.yang@xxxxxxxxx> --- xen/common/page_alloc.c | 3 ++- xen/include/asm-x86/x86_32/page.h | 19 ++++++++++++++++--- xen/include/asm-x86/x86_64/page.h | 8 +++++++- 3 files changed, 25 insertions(+), 5 deletions(-) diff -r 687376c92188 -r b8d2f08f98d0 xen/common/page_alloc.c --- a/xen/common/page_alloc.c Tue Mar 31 11:19:56 2009 +0100 +++ b/xen/common/page_alloc.c Tue Mar 31 11:21:14 2009 +0100 @@ -302,7 +302,8 @@ static unsigned long init_node_heap(int (mfn + needed) <= (virt_to_mfn(DIRECTMAP_VIRT_END - 1) + 1) ) { _heap[node] = mfn_to_virt(mfn); - avail[node] = mfn_to_virt(mfn + needed) - sizeof(**avail) * NR_ZONES; + avail[node] = mfn_to_virt(mfn + needed - 1) + + PAGE_SIZE - sizeof(**avail) * NR_ZONES; } #endif else if ( get_order_from_bytes(sizeof(**_heap)) == diff -r 687376c92188 -r b8d2f08f98d0 xen/include/asm-x86/x86_32/page.h --- a/xen/include/asm-x86/x86_32/page.h Tue Mar 31 11:19:56 2009 +0100 +++ b/xen/include/asm-x86/x86_32/page.h Tue Mar 31 11:21:14 2009 +0100 @@ -27,9 +27,6 @@ #define __PAGE_OFFSET (0xFF000000) #define __XEN_VIRT_START __PAGE_OFFSET -#define virt_to_maddr(va) ((unsigned long)(va)-DIRECTMAP_VIRT_START) -#define maddr_to_virt(ma) ((void *)((unsigned long)(ma)+DIRECTMAP_VIRT_START)) - #define VADDR_BITS 32 #define VADDR_MASK (~0UL) @@ -43,6 +40,22 @@ #include <xen/config.h> #include <asm/types.h> + +static inline unsigned long __virt_to_maddr(unsigned long va) +{ + ASSERT(va >= DIRECTMAP_VIRT_START && va < DIRECTMAP_VIRT_END); + return va - DIRECTMAP_VIRT_START; +} +#define virt_to_maddr(va) \ + (__virt_to_maddr((unsigned long)(va))) + +static inline void *__maddr_to_virt(unsigned long ma) +{ + ASSERT(ma < DIRECTMAP_VIRT_END - DIRECTMAP_VIRT_START); + return (void *)(ma + DIRECTMAP_VIRT_START); +} +#define maddr_to_virt(ma) \ + (__maddr_to_virt((unsigned long)(ma))) /* read access (should only be used for debug printk's) */ typedef u64 intpte_t; diff -r 687376c92188 -r b8d2f08f98d0 xen/include/asm-x86/x86_64/page.h --- a/xen/include/asm-x86/x86_64/page.h Tue Mar 31 11:19:56 2009 +0100 +++ b/xen/include/asm-x86/x86_64/page.h Tue Mar 31 11:21:14 2009 +0100 @@ -46,8 +46,14 @@ static inline unsigned long __virt_to_ma } #define virt_to_maddr(va) \ (__virt_to_maddr((unsigned long)(va))) + +static inline void *__maddr_to_virt(unsigned long ma) +{ + ASSERT(ma < DIRECTMAP_VIRT_END - DIRECTMAP_VIRT_START); + return (void *)(ma + DIRECTMAP_VIRT_START); +} #define maddr_to_virt(ma) \ - ((void *)((unsigned long)(ma)+DIRECTMAP_VIRT_START)) + (__maddr_to_virt((unsigned long)(ma))) /* read access (should only be used for debug printk's) */ typedef u64 intpte_t; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |