[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2 of 2] Unbreak HVM live migration after 0b138a019292
# HG changeset patch # User Brendan Cully <brendan@xxxxxxxxx> # Date 1264031014 28800 # Node ID 7ba22c778aac4e4041eba86c32916694deeeabf7 # Parent 3a6f73240fbd5e66cb7b4c8f84a91513615cc806 Unbreak HVM live migration after 0b138a019292. 0b138a019292 was a little too ambitious replacing xc_map_foreign_batch with xc_map_foreign_pages in xc_domain_restore. With HVM, some of the mappings are expected to fail (as "XTAB" pages). Signed-off-by: Brendan Cully <brendan@xxxxxxxxx> diff --git a/tools/libxc/xc_domain_restore.c b/tools/libxc/xc_domain_restore.c --- a/tools/libxc/xc_domain_restore.c +++ b/tools/libxc/xc_domain_restore.c @@ -1171,6 +1171,8 @@ unsigned long *page = NULL; int nraces = 0; struct domain_info_context *dinfo = &ctx->dinfo; + int* pfn_err = NULL; + int rc = -1; unsigned long mfn, pfn, pagetype; @@ -1186,12 +1188,14 @@ } /* Map relevant mfns */ - region_base = xc_map_foreign_pages( - xc_handle, dom, PROT_WRITE, region_mfn, j); + pfn_err = calloc(j, sizeof(*pfn_err)); + region_base = xc_map_foreign_bulk( + xc_handle, dom, PROT_WRITE, region_mfn, pfn_err, j); if ( region_base == NULL ) { ERROR("map batch failed"); + free(pfn_err); return -1; } @@ -1204,12 +1208,18 @@ /* a bogus/unmapped page: skip it */ continue; + if (pfn_err[i]) + { + ERROR("unexpected PFN mapping failure"); + goto err_mapped; + } + ++curpage; if ( pfn > dinfo->p2m_size ) { ERROR("pfn out of range"); - return -1; + goto err_mapped; } pfn_type[pfn] = pagetype; @@ -1257,7 +1267,7 @@ { ERROR("Bogus page type %lx page table is out of range: " "i=%d p2m_size=%lu", pagetype, i, dinfo->p2m_size); - return -1; + goto err_mapped; } if ( pagebuf->verify ) @@ -1288,13 +1298,17 @@ | MMU_MACHPHYS_UPDATE, pfn) ) { ERROR("failed machpys update mfn=%lx pfn=%lx", mfn, pfn); - return -1; + goto err_mapped; } } /* end of 'batch' for loop */ + rc = nraces; + + err_mapped: munmap(region_base, j*PAGE_SIZE); + free(pfn_err); - return nraces; + return rc; } int xc_domain_restore(int xc_handle, int io_fd, uint32_t dom, _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |