Signed-off-by: Mukesh Rathor --- diff -r 746955812d23 tools/libxc/xc_dom_x86.c --- a/tools/libxc/xc_dom_x86.c Wed Mar 11 17:47:56 2009 -0700 +++ b/tools/libxc/xc_dom_x86.c Wed Mar 18 14:31:07 2009 -0700 @@ -25,6 +25,7 @@ #include "xenctrl.h" /* ------------------------------------------------------------------------ */ +#define MEM_CHUNKSZ 1024*1024 #define bits_to_mask(bits) (((xen_vaddr_t)1 << (bits))-1) #define round_down(addr, mask) ((addr) & ~(mask)) @@ -694,7 +695,7 @@ int arch_setup_meminit(struct xc_dom_ima int arch_setup_meminit(struct xc_dom_image *dom) { int rc; - xen_pfn_t pfn; + xen_pfn_t pfn, pages, allocsz, *p2mp; rc = x86_compat(dom->guest_xc, dom->guest_domid, dom->guest_type); if ( rc ) @@ -712,10 +713,16 @@ int arch_setup_meminit(struct xc_dom_ima for ( pfn = 0; pfn < dom->total_pages; pfn++ ) dom->p2m_host[pfn] = pfn; - /* allocate guest memory */ - rc = xc_domain_memory_populate_physmap(dom->guest_xc, dom->guest_domid, - dom->total_pages, 0, 0, - dom->p2m_host); + /* allocate guest memory MEM_CHUNKSZ at a time */ + for ( rc=0, p2mp=dom->p2m_host, pages=dom->total_pages; !rc && pages; ) + { + allocsz = (pages <= MEM_CHUNKSZ) ? pages : MEM_CHUNKSZ; + rc = xc_domain_memory_populate_physmap(dom->guest_xc, dom->guest_domid, + allocsz, 0, 0, p2mp); + pages -= allocsz; + p2mp += allocsz; + } + return rc; }