[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 05/13] xen/arm: early_ioremap: allocate virtual addresses from top to bottom
Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> --- xen/arch/arm/mm.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-) diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c index ba3140d..bd7baaf 100644 --- a/xen/arch/arm/mm.c +++ b/xen/arch/arm/mm.c @@ -433,15 +433,17 @@ void __init setup_frametable_mappings(paddr_t ps, paddr_t pe) */ void* __init early_ioremap(paddr_t start, size_t len, unsigned attributes) { - static unsigned long virt_start = EARLY_VMAP_VIRT_START; - unsigned long ret_addr = virt_start; + static unsigned long virt_start = EARLY_VMAP_VIRT_END; paddr_t end = start + len; + len = ((len + SECOND_SIZE - 1) >> SECOND_SHIFT) << SECOND_SHIFT; + virt_start -= len; + ASSERT(!(start & (~SECOND_MASK))); ASSERT(!(virt_start & (~SECOND_MASK))); /* The range we need to map is too big */ - if ( virt_start + len >= EARLY_VMAP_VIRT_END ) + if ( virt_start >= EARLY_VMAP_VIRT_START ) return NULL; while ( start < end ) @@ -453,9 +455,10 @@ void* __init early_ioremap(paddr_t start, size_t len, unsigned attributes) start += SECOND_SIZE; virt_start += SECOND_SIZE; } - flush_xen_data_tlb_range_va(ret_addr, len); + virt_start -= len; + flush_xen_data_tlb_range_va(virt_start, len); - return (void*)ret_addr; + return (void*)virt_start; } enum mg { mg_clear, mg_ro, mg_rw, mg_rx }; -- 1.7.2.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |