]> xenbits.xensource.com Git - people/vhanquez/xen.git/commitdiff
32-on-64: Fix physaddr_bitsize computation when creating a 32b x86
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 5 Jun 2008 09:50:54 +0000 (10:50 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 5 Jun 2008 09:50:54 +0000 (10:50 +0100)
compat domain.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen-unstable changeset:   17783:31a941632a5db6ea91325a13d875e714918ac428
xen-unstable date:        Thu Jun 05 10:47:08 2008 +0100

xen/arch/x86/domain.c
xen/arch/x86/domain_build.c

index c6014db5f263e77e4b77b0035ec0e1b24aa1dab4..60d53ba2f1643bc476d1dbe0533d30a9e7837a96 100644 (file)
@@ -347,8 +347,10 @@ int switch_compat(struct domain *d)
     }
 
     d->arch.physaddr_bitsize =
-        fls((1UL << 32) - HYPERVISOR_COMPAT_VIRT_START(d)) - 1
-        + (PAGE_SIZE - 2);
+        /* 2^n entries can be contained in guest's p2m mapping space */
+        fls((1UL << 32) - HYPERVISOR_COMPAT_VIRT_START(d)) - 3
+        /* 2^n pages -> 2^(n+PAGE_SHIFT) bits */
+        + PAGE_SHIFT;
 
     return 0;
 
index dc8ee52f075f39dff8b71f93e70305b3e09c8920..b0330c2d05d9c5cd8a2a640b49a4158e4abe41ac 100644 (file)
@@ -365,8 +365,10 @@ int __init construct_dom0(
 #if defined(__x86_64__)
     if ( is_pv_32on64_domain(d) )
         d->arch.physaddr_bitsize =
-            fls((1UL << 32) - HYPERVISOR_COMPAT_VIRT_START(d)) - 1
-            + (PAGE_SIZE - 2);
+            /* 2^n entries can be contained in guest's p2m mapping space */
+            fls((1UL << 32) - HYPERVISOR_COMPAT_VIRT_START(d)) - 3
+            /* 2^n pages -> 2^(n+PAGE_SHIFT) bits */
+            + PAGE_SHIFT;
 #endif
 
     /*