[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 05/24] xen/arm: mm: Move mfn_to_xen_entry from page.h to mm.c
On Tue, 13 Jun 2017, Julien Grall wrote: > The file mm.c is the only user of mfn_to_xen_entry. This will also help > to use the typesafe MFN. > > Signed-off-by: Julien Grall <julien.grall@xxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > --- > xen/arch/arm/mm.c | 65 > ++++++++++++++++++++++++++++++++++++++++++++++ > xen/include/asm-arm/page.h | 65 > ---------------------------------------------- > 2 files changed, 65 insertions(+), 65 deletions(-) > > diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c > index b4ff777b55..587a6b3975 100644 > --- a/xen/arch/arm/mm.c > +++ b/xen/arch/arm/mm.c > @@ -254,6 +254,71 @@ void dump_hyp_walk(vaddr_t addr) > dump_pt_walk(ttbr, addr, HYP_PT_ROOT_LEVEL, 1); > } > > +/* Standard entry type that we'll use to build Xen's own pagetables. > + * We put the same permissions at every level, because they're ignored > + * by the walker in non-leaf entries. */ > +static inline lpae_t mfn_to_xen_entry(unsigned long mfn, unsigned attr) > +{ > + paddr_t pa = ((paddr_t) mfn) << PAGE_SHIFT; > + lpae_t e = (lpae_t) { > + .pt = { > + .valid = 1, /* Mappings are present */ > + .table = 0, /* Set to 1 for links and 4k maps */ > + .ai = attr, > + .ns = 1, /* Hyp mode is in the non-secure world */ > + .user = 1, /* See below */ > + .ro = 0, /* Assume read-write */ > + .af = 1, /* No need for access tracking */ > + .ng = 1, /* Makes TLB flushes easier */ > + .contig = 0, /* Assume non-contiguous */ > + .xn = 1, /* No need to execute outside .text */ > + .avail = 0, /* Reference count for domheap mapping */ > + }};; > + /* Setting the User bit is strange, but the ATS1H[RW] instructions > + * don't seem to work otherwise, and since we never run on Xen > + * pagetables in User mode it's OK. If this changes, remember > + * to update the hard-coded values in head.S too */ > + > + switch ( attr ) > + { > + case BUFFERABLE: > + /* > + * ARM ARM: Overlaying the shareability attribute (DDI > + * 0406C.b B3-1376 to 1377) > + * > + * A memory region with a resultant memory type attribute of Normal, > + * and a resultant cacheability attribute of Inner Non-cacheable, > + * Outer Non-cacheable, must have a resultant shareability attribute > + * of Outer Shareable, otherwise shareability is UNPREDICTABLE. > + * > + * On ARMv8 sharability is ignored and explicitly treated as Outer > + * Shareable for Normal Inner Non_cacheable, Outer Non-cacheable. > + */ > + e.pt.sh = LPAE_SH_OUTER; > + break; > + case UNCACHED: > + case DEV_SHARED: > + /* Shareability is ignored for non-Normal memory, Outer is as > + * good as anything. > + * > + * On ARMv8 sharability is ignored and explicitly treated as Outer > + * Shareable for any device memory type. > + */ > + e.pt.sh = LPAE_SH_OUTER; > + break; > + default: > + e.pt.sh = LPAE_SH_INNER; /* Xen mappings are SMP coherent */ > + break; > + } > + > + ASSERT(!(pa & ~PAGE_MASK)); > + ASSERT(!(pa & ~PADDR_MASK)); > + > + // XXX shifts > + e.bits |= pa; > + return e; > +} > + > /* Map a 4k page in a fixmap entry */ > void set_fixmap(unsigned map, unsigned long mfn, unsigned attributes) > { > diff --git a/xen/include/asm-arm/page.h b/xen/include/asm-arm/page.h > index 497b4c86ad..3670ab665d 100644 > --- a/xen/include/asm-arm/page.h > +++ b/xen/include/asm-arm/page.h > @@ -205,71 +205,6 @@ typedef union { > lpae_walk_t walk; > } lpae_t; > > -/* Standard entry type that we'll use to build Xen's own pagetables. > - * We put the same permissions at every level, because they're ignored > - * by the walker in non-leaf entries. */ > -static inline lpae_t mfn_to_xen_entry(unsigned long mfn, unsigned attr) > -{ > - paddr_t pa = ((paddr_t) mfn) << PAGE_SHIFT; > - lpae_t e = (lpae_t) { > - .pt = { > - .valid = 1, /* Mappings are present */ > - .table = 0, /* Set to 1 for links and 4k maps */ > - .ai = attr, > - .ns = 1, /* Hyp mode is in the non-secure world */ > - .user = 1, /* See below */ > - .ro = 0, /* Assume read-write */ > - .af = 1, /* No need for access tracking */ > - .ng = 1, /* Makes TLB flushes easier */ > - .contig = 0, /* Assume non-contiguous */ > - .xn = 1, /* No need to execute outside .text */ > - .avail = 0, /* Reference count for domheap mapping */ > - }};; > - /* Setting the User bit is strange, but the ATS1H[RW] instructions > - * don't seem to work otherwise, and since we never run on Xen > - * pagetables in User mode it's OK. If this changes, remember > - * to update the hard-coded values in head.S too */ > - > - switch ( attr ) > - { > - case BUFFERABLE: > - /* > - * ARM ARM: Overlaying the shareability attribute (DDI > - * 0406C.b B3-1376 to 1377) > - * > - * A memory region with a resultant memory type attribute of Normal, > - * and a resultant cacheability attribute of Inner Non-cacheable, > - * Outer Non-cacheable, must have a resultant shareability attribute > - * of Outer Shareable, otherwise shareability is UNPREDICTABLE. > - * > - * On ARMv8 sharability is ignored and explicitly treated as Outer > - * Shareable for Normal Inner Non_cacheable, Outer Non-cacheable. > - */ > - e.pt.sh = LPAE_SH_OUTER; > - break; > - case UNCACHED: > - case DEV_SHARED: > - /* Shareability is ignored for non-Normal memory, Outer is as > - * good as anything. > - * > - * On ARMv8 sharability is ignored and explicitly treated as Outer > - * Shareable for any device memory type. > - */ > - e.pt.sh = LPAE_SH_OUTER; > - break; > - default: > - e.pt.sh = LPAE_SH_INNER; /* Xen mappings are SMP coherent */ > - break; > - } > - > - ASSERT(!(pa & ~PAGE_MASK)); > - ASSERT(!(pa & ~PADDR_MASK)); > - > - // XXX shifts > - e.bits |= pa; > - return e; > -} > - > #if defined(CONFIG_ARM_32) > # include <asm/arm32/page.h> > #elif defined(CONFIG_ARM_64) > -- > 2.11.0 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |