aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxc/xc_dom_x86.c
diff options
context:
space:
mode:
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>2007-02-02 15:41:45 +0000
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>2007-02-02 15:41:45 +0000
commit44480a08208d2a31fd7c5ff66aaa7cf44f7176bb (patch)
treee1b03fda36cef81769f511b3b4df925d0d24d48e /tools/libxc/xc_dom_x86.c
parent502043ef9001010fc8f6390a15b50d584d1e088f (diff)
downloadxen-44480a08208d2a31fd7c5ff66aaa7cf44f7176bb.tar.gz
xen-44480a08208d2a31fd7c5ff66aaa7cf44f7176bb.tar.bz2
xen-44480a08208d2a31fd7c5ff66aaa7cf44f7176bb.zip
libxc: Domain builder must align initial virtual mapping to 4MB
boundaries. From: Gerd Hoffmann <kraxel@suse.de> Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'tools/libxc/xc_dom_x86.c')
-rw-r--r--tools/libxc/xc_dom_x86.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/tools/libxc/xc_dom_x86.c b/tools/libxc/xc_dom_x86.c
index 9e489c320d..fdc3d4ba5e 100644
--- a/tools/libxc/xc_dom_x86.c
+++ b/tools/libxc/xc_dom_x86.c
@@ -66,11 +66,12 @@ static int count_pgtables(struct xc_dom_image *dom, int pae,
extra_pages = dom->alloc_bootstack ? 1 : 0;
extra_pages += dom->extra_pages;
+ extra_pages += 128; /* 512kB padding */
pages = extra_pages;
for (;;)
{
try_virt_end = round_up(dom->virt_alloc_end + pages * PAGE_SIZE_X86,
- bits_to_mask(l1_bits));
+ bits_to_mask(22)); /* 4MB alignment */
dom->pg_l4 =
nr_page_tables(dom->parms.virt_base, try_virt_end, l4_bits);
dom->pg_l3 =
@@ -313,6 +314,7 @@ static int alloc_magic_pages(struct xc_dom_image *dom)
if (xc_dom_feature_translated(dom))
dom->shared_info_pfn = xc_dom_alloc_page(dom, "shared info");
dom->alloc_bootstack = 1;
+
return 0;
}