[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 04/22] mini-os: make some memory management related macros usable from assembler
Juergen Gross, on Tue 23 Aug 2016 17:15:50 +0200, wrote: > Especially page table entry definitions are currently not usable from > assembler sources on x86 as the constants are defined with ULL suffix. > Change this by adding the suffix only when the header is included from > a C source. > > Hide some C prototypes when in assembler environment. > > Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Reviewed-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> > --- > include/x86/arch_mm.h | 56 > +++++++++++++++++++++++++++++++-------------------- > 1 file changed, 34 insertions(+), 22 deletions(-) > > diff --git a/include/x86/arch_mm.h b/include/x86/arch_mm.h > index 690a919..2b18b34 100644 > --- a/include/x86/arch_mm.h > +++ b/include/x86/arch_mm.h > @@ -29,11 +29,16 @@ > #include <xen/xen.h> > #if defined(__i386__) > #include <xen/arch-x86_32.h> > +#define __CONST(x) x ## ULL > #elif defined(__x86_64__) > #include <xen/arch-x86_64.h> > +#define __CONST(x) x ## UL > #else > #error "Unsupported architecture" > #endif > +#define CONST(x) __CONST(x) > +#else > +#define CONST(x) x > #endif > > /* > @@ -81,14 +86,16 @@ > #define PRIpte "016llx" > #ifndef __ASSEMBLY__ > typedef uint64_t pgentry_t; > +#else > +#define PTE(val) .long val; .long 0 > #endif > > -#define MAX_MEM_SIZE 0x3f000000UL > -#define VIRT_KERNEL_AREA 0x3f000000UL > -#define VIRT_DEMAND_AREA 0x40000000UL > -#define VIRT_HEAP_AREA 0xb0000000UL > +#define MAX_MEM_SIZE CONST(0x3f000000) > +#define VIRT_KERNEL_AREA CONST(0x3f000000) > +#define VIRT_DEMAND_AREA CONST(0x40000000) > +#define VIRT_HEAP_AREA CONST(0xb0000000) > > -#define DEMAND_MAP_PAGES 0x6ffffUL > +#define DEMAND_MAP_PAGES CONST(0x6ffff) > #define HEAP_PAGES_MAX ((HYPERVISOR_VIRT_START - VIRT_HEAP_AREA) / \ > PAGE_SIZE - 1) > > @@ -115,15 +122,17 @@ typedef uint64_t pgentry_t; > #define PRIpte "016lx" > #ifndef __ASSEMBLY__ > typedef unsigned long pgentry_t; > +#else > +#define PTE(val) .quad val > #endif > > -#define MAX_MEM_SIZE (512ULL << 30) > -#define VIRT_KERNEL_AREA 0x0000008000000000UL > -#define VIRT_DEMAND_AREA 0x0000100000000000UL > -#define VIRT_HEAP_AREA 0x0000200000000000UL > +#define MAX_MEM_SIZE (CONST(512) << 30) > +#define VIRT_KERNEL_AREA CONST(0x0000008000000000) > +#define VIRT_DEMAND_AREA CONST(0x0000100000000000) > +#define VIRT_HEAP_AREA CONST(0x0000200000000000) > > -#define DEMAND_MAP_PAGES 0x8000000UL > -#define HEAP_PAGES_MAX 0x8000000UL > +#define DEMAND_MAP_PAGES CONST(0x8000000) > +#define HEAP_PAGES_MAX CONST(0x8000000) > > #endif > > @@ -147,16 +156,16 @@ typedef unsigned long pgentry_t; > (((_a) >> L4_PAGETABLE_SHIFT) & (L4_PAGETABLE_ENTRIES - 1)) > #endif > > -#define _PAGE_PRESENT 0x001ULL > -#define _PAGE_RW 0x002ULL > -#define _PAGE_USER 0x004ULL > -#define _PAGE_PWT 0x008ULL > -#define _PAGE_PCD 0x010ULL > -#define _PAGE_ACCESSED 0x020ULL > -#define _PAGE_DIRTY 0x040ULL > -#define _PAGE_PAT 0x080ULL > -#define _PAGE_PSE 0x080ULL > -#define _PAGE_GLOBAL 0x100ULL > +#define _PAGE_PRESENT CONST(0x001) > +#define _PAGE_RW CONST(0x002) > +#define _PAGE_USER CONST(0x004) > +#define _PAGE_PWT CONST(0x008) > +#define _PAGE_PCD CONST(0x010) > +#define _PAGE_ACCESSED CONST(0x020) > +#define _PAGE_DIRTY CONST(0x040) > +#define _PAGE_PAT CONST(0x080) > +#define _PAGE_PSE CONST(0x080) > +#define _PAGE_GLOBAL CONST(0x100) > > #if defined(__i386__) > #define L1_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED) > @@ -191,12 +200,14 @@ typedef unsigned long pgentry_t; > #define L3_P2M_IDX(pfn) (((pfn) >> L2_P2M_SHIFT) & P2M_MASK) > #define INVALID_P2M_ENTRY (~0UL) > > +#ifndef __ASSEMBLY__ > void p2m_chk_pfn(unsigned long pfn); > > static inline unsigned long p2m_pages(unsigned long pages) > { > return (pages + P2M_ENTRIES - 1) >> L1_P2M_SHIFT; > } > +#endif > > #include "arch_limits.h" > #define PAGE_SIZE __PAGE_SIZE > @@ -239,7 +250,6 @@ static __inline__ paddr_t machine_to_phys(maddr_t machine) > phys = (phys << PAGE_SHIFT) | (machine & ~PAGE_MASK); > return phys; > } > -#endif > > #define VIRT_START ((unsigned long)&_text) > > @@ -288,4 +298,6 @@ static __inline__ paddr_t machine_to_phys(maddr_t machine) > > pgentry_t *need_pgt(unsigned long addr); > > +#endif > + > #endif /* _ARCH_MM_H_ */ > -- > 2.6.6 > -- Samuel I am the "ILOVEGNU" signature virus. Just copy me to your signature. This email was infected under the terms of the GNU General Public License. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |