[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging-4.22] xen/mm: Remove INVALID_{MFN,GFN}_INITIALIZER



commit 3bd8df7ebf02384cd532bac0618950b04a790600
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Wed Feb 25 12:16:53 2026 +0000
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Tue Jun 30 16:47:01 2026 +0100

    xen/mm: Remove INVALID_{MFN,GFN}_INITIALIZER
    
    These existed to work around a bug in older GCC when using struct-casting 
for
    variable initialisation.  However, our baseline toolchain is new enough to 
not
    suffer this bug.
    
    Removing these resolves two MISRA Rule 9.2 violations which exist in release
    builds of Xen only, where "= { ... }" is disallowed for simple scalar
    initialisation.
    
    The BUILD_BUG_ON() in xenmem_add_to_physmap() cannot stay as it is, because
    INVALID_GFN is not an Integer Constant Expression.  Replace it BUILD_ERROR()
    which is the nearest available alternative.
    
    No functional change.
    
    Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
    Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx>
    Release-Acked-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
    (cherry picked from commit e6b68789d42cb7ecae1ed5155a324872c2f7f5b8)
---
 xen/arch/arm/mmu/setup.c   |  2 +-
 xen/arch/riscv/mm.c        |  2 +-
 xen/arch/x86/efi/runtime.h |  2 +-
 xen/common/memory.c        |  4 +++-
 xen/common/page_alloc.c    |  2 +-
 xen/include/xen/mm-frame.h | 16 ++--------------
 6 files changed, 9 insertions(+), 19 deletions(-)

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 <asm/mc146818rtc.h>
 
 #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 */
--
generated by git-patchbot for /home/xen/git/xen.git#staging-4.22



 


Rackspace

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