From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: [PATCH] x86/iommu: account for necessary allocations when calculating Dom0's initial allocation size Date: Tue, 14 Dec 2010 09:36:37 +0000 Message-ID: <4D0748B50200007800027C32@vpn.id2.novell.com> References: <4D07410B0200007800027C04@vpn.id2.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org >>> On 14.12.10 at 10:28, Keir Fraser wrote: > Thank Jan. I'm not really sure about putting your earlier patch into = 4.0.2, > so can I put only this patch in for 4.0.2, replacing max_pdx with = max_page? Yes, that would be the correct equivalent without that other patch. But it is clear that without the other one a system may not even boot if the holes are large enough - but that's the case in plain 4.0.0 too, i.e. not a regression. Jan > On 14/12/2010 09:03, "Jan Beulich" wrote: >=20 >> As of c/s 21812:e382656e4dcc, IOMMU related allocations for Dom0 >> happen only after it got all of its memory allocated, and hence the >> reserve (mainly for setting up its swiotlb) may get exhausted without >> accounting for the necessary allocations up front. >>=20 >> While not precise, the estimate has been found to be within a couple >> of pages for the systems it got tested on. >>=20 >> For the calculation to be reasonably correct, this depends on the >> patch titled "x86/iommu: don't map RAM holes above 4G" sent out >> yesterday. >>=20 >> Signed-off-by: Jan Beulich >>=20 >> --- a/xen/arch/x86/domain_build.c >> +++ b/xen/arch/x86/domain_build.c >> @@ -191,6 +191,15 @@ static unsigned long __init compute_dom0 >> if ( is_pv_32on64_domain(d) ) >> avail -=3D opt_dom0_max_vcpus - 1; >> =20 >> + /* Reserve memory for iommu_dom0_init() (rough estimate). */ >> + if ( iommu_enabled ) >> + { >> + unsigned int s; >> + >> + for ( s =3D 9; s < BITS_PER_LONG; s +=3D 9 ) >> + avail -=3D max_pdx >> s; >> + } >> + >> /* >> * If domain 0 allocation isn't specified, reserve 1/16th of = available >> * memory for things like DMA buffers. This reservation is clamped = to >>=20 >>=20 >>=20 >> _______________________________________________ >> Xen-devel mailing list >> Xen-devel@lists.xensource.com=20 >> http://lists.xensource.com/xen-devel=20