#define INVALID_BPN ((BPN)0x0000ffffffffffffull)
-#define MPN38_MASK ((1ull << 38) - 1)
+#if defined(VM_X86_ANY)
+#define MPN_MASK ((1ull << 38) - 1)
+#elif defined(VM_ARM_64)
+#define MPN_MASK ((1ull << 36) - 1) /* without FEAT_LPA{,2} */
+#endif
#define RESERVED_MPN ((MPN)0)
-#define INVALID_MPN ((MPN)MPN38_MASK)
-#define MEMREF_MPN ((MPN)MPN38_MASK - 1)
-#define RELEASED_MPN ((MPN)MPN38_MASK - 2)
-#define ECC_CORRUPTED_MPN ((MPN)MPN38_MASK - 3)
+#define INVALID_MPN ((MPN)MPN_MASK)
+#define MEMREF_MPN ((MPN)MPN_MASK - 1)
+#define RELEASED_MPN ((MPN)MPN_MASK - 2)
+#define ECC_CORRUPTED_MPN ((MPN)MPN_MASK - 3)
/* account for special MPNs defined above */
-#define MAX_MPN ((MPN)MPN38_MASK - 4) /* 50 bits of address space */
+#define MAX_MPN ((MPN)MPN_MASK - 4)
#define INVALID_IOPN ((IOPN)-1)
#define MAX_IOPN (IOA_2_IOPN((IOA)-1))