[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.