From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v3 05/13] xen/arm: early_ioremap: allocate virtual addresses from top to bottom Date: Wed, 24 Apr 2013 20:07:35 +0100 Message-ID: <1366830463-12153-5-git-send-email-stefano.stabellini@eu.citrix.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xensource.com Cc: julien.grall@citrix.com, tim@xen.org, Ian.Campbell@citrix.com, Stefano Stabellini List-Id: xen-devel@lists.xenproject.org Signed-off-by: Stefano Stabellini --- 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