[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 04/16] arm: handle xenheap which isn't at the start of RAM.
At 13:30 +0000 on 03 Sep (1346679044), Ian Campbell wrote: > Also refactor page_to_virt somewhat in an attempt to make it clearer > what is happening. > > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > --- > xen/include/asm-arm/mm.h | 24 +++++++++++++++++++----- > 1 files changed, 19 insertions(+), 5 deletions(-) > > diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h > index b37bd35..6498322 100644 > --- a/xen/include/asm-arm/mm.h > +++ b/xen/include/asm-arm/mm.h > @@ -214,17 +214,31 @@ static inline struct page_info *virt_to_page(const void > *v) > ASSERT(va >= XENHEAP_VIRT_START); > ASSERT(va < xenheap_virt_end); > > - return frame_table + ((va - XENHEAP_VIRT_START) >> PAGE_SHIFT); > + return frame_table > + + ((va - XENHEAP_VIRT_START) >> PAGE_SHIFT) > + + xenheap_mfn_start > + - frametable_base_mfn; > } > > static inline void *page_to_virt(const struct page_info *pg) > { > + unsigned long va; > + const unsigned long offset = > + (xenheap_mfn_start-frametable_base_mfn)*sizeof(*pg); > + > + /* > + * Dividing by this on both top and bottom factors out the largest > + * common factor of 2 which helps the compiler to use smaller shifts. > + */ > + const unsigned long lcd = (sizeof(*pg) & -sizeof(*pg)); > + > ASSERT((unsigned long)pg - FRAMETABLE_VIRT_START < frametable_virt_end); > - return (void *)(XENHEAP_VIRT_START + > - ((unsigned long)pg - FRAMETABLE_VIRT_START) / > - (sizeof(*pg) / (sizeof(*pg) & -sizeof(*pg))) * > - (PAGE_SIZE / (sizeof(*pg) & -sizeof(*pg)))); > > + va = (unsigned long)pg; > + va = XENHEAP_VIRT_START + > + ((va - FRAMETABLE_VIRT_START - offset) / (sizeof(*pg) / lcd)) * > + (PAGE_SIZE / lcd); > + return (void *)va; This function is getting a bit too confusing. I think we should just use page_to_mfn and mfn_to_virt instead: the magic lcd trick eliminates a shift but having to construct "offset" to match it adds one. Tim. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |