diff --git a/xen/arch/arm/mmu/setup.c b/xen/arch/arm/mmu/setup.c index d042f73597..8fb0157aff 100644 --- a/xen/arch/arm/mmu/setup.c +++ b/xen/arch/arm/mmu/setup.c @@ -59,7 +59,7 @@ DEFINE_BOOT_PAGE_TABLE(xen_fixmap); static DEFINE_PAGE_TABLES(xen_xenmap, XEN_NR_ENTRIES(2)); /* Limits of the Xen heap */ -mfn_t directmap_mfn_start __read_mostly = INVALID_MFN_INITIALIZER; +mfn_t directmap_mfn_start __read_mostly = INVALID_MFN; mfn_t directmap_mfn_end __read_mostly; vaddr_t directmap_virt_end __read_mostly; #ifdef CONFIG_ARM_64 diff --git a/xen/arch/riscv/mm.c b/xen/arch/riscv/mm.c index e9ce182d06..4d3b8c2204 100644 --- a/xen/arch/riscv/mm.c +++ b/xen/arch/riscv/mm.c @@ -480,7 +480,7 @@ static void __init setup_frametable_mappings(paddr_t ps, paddr_t pe) static void __init setup_directmap_mappings(unsigned long base_mfn, unsigned long nr_mfns) { - static mfn_t __initdata directmap_mfn_start = INVALID_MFN_INITIALIZER; + static mfn_t __initdata directmap_mfn_start = INVALID_MFN; mfn_t base_mfn_t = _mfn(base_mfn); unsigned long base_addr = mfn_to_maddr(base_mfn_t); diff --git a/xen/arch/x86/efi/runtime.h b/xen/arch/x86/efi/runtime.h index 88ab5651e9..f92d7af95e 100644 --- a/xen/arch/x86/efi/runtime.h +++ b/xen/arch/x86/efi/runtime.h @@ -7,7 +7,7 @@ #include #ifndef COMPAT -mfn_t __read_mostly efi_l4_mfn = INVALID_MFN_INITIALIZER; +mfn_t __read_mostly efi_l4_mfn = INVALID_MFN; void efi_update_l4_pgtable(unsigned int l4idx, l4_pgentry_t l4e) { diff --git a/xen/common/memory.c b/xen/common/memory.c index 3672bda025..2ca7723e50 100644 --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -991,7 +991,9 @@ int xenmem_add_to_physmap(struct domain *d, struct xen_add_to_physmap *xatp, * guaranteeing that it won't fall in the middle of the * [xatp->gpfn, xatp->gpfn + xatp->size) range checked above. */ - BUILD_BUG_ON(INVALID_GFN_RAW + 1); + if ( gfn_x(INVALID_GFN) + 1 ) + BUILD_ERROR("bad INVALID_GFN"); + return -EOVERFLOW; } diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c index e01ac3e99c..40b0f73563 100644 --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -275,7 +275,7 @@ static PAGE_LIST_HEAD(page_broken_list); * When !CONFIG_NUMA first_valid_mfn is non-static, for use by respective * stubs. */ -STATIC_IF(CONFIG_NUMA) mfn_t first_valid_mfn = INVALID_MFN_INITIALIZER; +STATIC_IF(CONFIG_NUMA) mfn_t first_valid_mfn = INVALID_MFN; struct bootmem_region { unsigned long s, e; /* MFNs @s through @e-1 inclusive are free */ diff --git a/xen/include/xen/mm-frame.h b/xen/include/xen/mm-frame.h index d973aec901..1402c20497 100644 --- a/xen/include/xen/mm-frame.h +++ b/xen/include/xen/mm-frame.h @@ -6,13 +6,7 @@ TYPE_SAFE(unsigned long, mfn); #define PRI_mfn "05lx" -#define INVALID_MFN_RAW (~0UL) -#define INVALID_MFN _mfn(INVALID_MFN_RAW) -/* - * To be used for global variable initialization. This workaround a bug - * in GCC < 5.0. - */ -#define INVALID_MFN_INITIALIZER { INVALID_MFN_RAW } +#define INVALID_MFN ((mfn_t){ ~0UL }) #if 0 #define mfn_t /* Grep fodder: mfn_t, _mfn() and mfn_x() are defined above */ @@ -42,13 +36,7 @@ static inline bool mfn_eq(mfn_t x, mfn_t y) TYPE_SAFE(unsigned long, gfn); #define PRI_gfn "05lx" -#define INVALID_GFN_RAW (~0UL) -#define INVALID_GFN _gfn(INVALID_GFN_RAW) -/* - * To be used for global variable initialization. This workaround a bug - * in GCC < 5.0 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64856 - */ -#define INVALID_GFN_INITIALIZER { INVALID_GFN_RAW } +#define INVALID_GFN ((gfn_t){ ~0UL }) #if 0 #define gfn_t /* Grep fodder: gfn_t, _gfn() and gfn_x() are defined above */