[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-3.2-testing] hvm: Allocate memory for hvm domains in batches.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1207755856 -3600 # Node ID 2fa13df6b409a8f9eb1a4fbb01809981e38c740d # Parent b41e2bdcad12e1d57cadf978dfe5b32b9b398b15 hvm: Allocate memory for hvm domains in batches. Without this change, dom0 is unresponsive while the hvm domain's physmap is populated in xen. Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx> xen-unstable changeset: 17416:aee133a8e5e72bc9a6da4bb1619931992da3b6ff xen-unstable date: Wed Apr 09 15:25:16 2008 +0100 --- tools/libxc/xc_hvm_build.c | 19 +++++++++++++++---- 1 files changed, 15 insertions(+), 4 deletions(-) diff -r b41e2bdcad12 -r 2fa13df6b409 tools/libxc/xc_hvm_build.c --- a/tools/libxc/xc_hvm_build.c Wed Apr 09 14:58:03 2008 +0100 +++ b/tools/libxc/xc_hvm_build.c Wed Apr 09 16:44:16 2008 +0100 @@ -156,7 +156,7 @@ static int setup_guest(int xc_handle, { xen_pfn_t *page_array = NULL; unsigned long i, nr_pages = (unsigned long)memsize << (20 - PAGE_SHIFT); - unsigned long shared_page_nr, entry_eip; + unsigned long shared_page_nr, entry_eip, cur_pages; struct xen_add_to_physmap xatp; struct shared_info *shared_info; void *e820_page; @@ -206,12 +206,23 @@ static int setup_guest(int xc_handle, for ( i = HVM_BELOW_4G_RAM_END >> PAGE_SHIFT; i < nr_pages; i++ ) page_array[i] += HVM_BELOW_4G_MMIO_LENGTH >> PAGE_SHIFT; - /* Allocate memory for HVM guest, skipping VGA hole 0xA0000-0xC0000. */ + /* + * Allocate memory for HVM guest, skipping VGA hole 0xA0000-0xC0000. + * We allocate pages in batches of no more than 2048 to ensure that + * we can be preempted and hence dom0 remains responsive. + */ rc = xc_domain_memory_populate_physmap( xc_handle, dom, 0xa0, 0, 0, &page_array[0x00]); - if ( rc == 0 ) + cur_pages = 0xc0; + while ( (rc == 0) && (nr_pages > cur_pages) ) + { + unsigned long count = nr_pages - cur_pages; + if ( count > 2048 ) + count = 2048; rc = xc_domain_memory_populate_physmap( - xc_handle, dom, nr_pages - 0xc0, 0, 0, &page_array[0xc0]); + xc_handle, dom, count, 0, 0, &page_array[cur_pages]); + cur_pages += count; + } if ( rc != 0 ) { PERROR("Could not allocate memory for HVM guest.\n"); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |