Due to the layout of the guest physical address space we cannot support more
than 768M of RAM before overrunning the area set aside for the grant table. Due
to the presence of the magic pages at the end of the RAM region guests are
actually limited to 767M.
Catch this case during domain build and fail gracefully instead of obscurely
later on.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
return -1;
}
+ if ( ramsize > GUEST_RAM_SIZE - NR_MAGIC_PAGES*XC_PAGE_SIZE )
+ {
+ DOMPRINTF("%s: ram size is too large for guest address space: "
+ "%"PRIx64" > %llx",
+ __FUNCTION__, ramsize,
+ GUEST_RAM_SIZE - NR_MAGIC_PAGES*XC_PAGE_SIZE);
+ return -1;
+ }
+
rc = set_mode(dom->xch, dom->guest_domid, dom->guest_type);
if ( rc )
return rc;
#define GUEST_GICC_BASE 0x2c002000ULL
#define GUEST_GICC_SIZE 0x100ULL
-#define GUEST_RAM_BASE 0x80000000ULL
+#define GUEST_RAM_BASE 0x80000000ULL /* 768M @ 2GB */
+#define GUEST_RAM_SIZE 0x30000000ULL
#define GUEST_GNTTAB_BASE 0xb0000000ULL
#define GUEST_GNTTAB_SIZE 0x00020000ULL