From: Keir Fraser Date: Thu, 5 Jun 2008 09:50:54 +0000 (+0100) Subject: 32-on-64: Fix physaddr_bitsize computation when creating a 32b x86 X-Git-Tag: 3.2.2-rc1~31 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=fae3d3322e1cf5f0c38a115fd0b74aee16379ea6;p=people%2Fvhanquez%2Fxen.git 32-on-64: Fix physaddr_bitsize computation when creating a 32b x86 compat domain. Signed-off-by: Jan Beulich Signed-off-by: Keir Fraser xen-unstable changeset: 17783:31a941632a5db6ea91325a13d875e714918ac428 xen-unstable date: Thu Jun 05 10:47:08 2008 +0100 --- diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index c6014db5f..60d53ba2f 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -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; diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index dc8ee52f0..b0330c2d0 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -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 /*