|
[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 |