[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Tolerate temporary inconsistency between type info and page contents on
# HG changeset patch # User smh22@xxxxxxxxxxxxxxxxxxxx # Node ID d46553f73c6f8ebef2b4a2d1605957c47550792b # Parent 5ae89ce6748640a35e0866a7fe3ca258c03214be Tolerate temporary inconsistency between type info and page contents on (live) restore. This should now enable live migrate of fork-intensive (or other page-table-intensive) workloads. Signed-off-by: Steven Hand <steven@xxxxxxxxxxxxx> diff -r 5ae89ce67486 -r d46553f73c6f tools/libxc/xc_linux_restore.c --- a/tools/libxc/xc_linux_restore.c Fri Nov 25 15:26:19 2005 +++ b/tools/libxc/xc_linux_restore.c Fri Nov 25 16:53:41 2005 @@ -78,6 +78,7 @@ pfn = (pte >> PAGE_SHIFT) & 0xffffffff; if(pfn >= max_pfn) { + /* This "page table page" is probably not one; bail. */ ERR("Frame number in type %lu page table is out of range: " "i=%d pfn=0x%lx max_pfn=%lu", type >> 28, i, pfn, max_pfn); @@ -111,6 +112,7 @@ unsigned long mfn, pfn; unsigned int prev_pc, this_pc; int verify = 0; + int nraces = 0; /* The new domain's shared-info frame number. */ unsigned long shared_info_frame; @@ -344,8 +346,15 @@ if(pt_levels != 3 || pagetype != L1TAB) { if(!uncanonicalize_pagetable(pagetype, page)) { - ERR("failed uncanonicalize pt!\n"); - goto out; + /* + ** Failing to uncanonicalize a page table can be ok + ** under live migration since the pages type may have + ** changed by now (and we'll get an update later). + */ + DPRINTF("PT L%ld race on pfn=%08lx mfn=%08lx\n", + pagetype >> 28, pfn, mfn); + nraces++; + continue; } } @@ -394,7 +403,7 @@ n+= j; /* crude stats */ } - DPRINTF("Received all pages\n"); + DPRINTF("Received all pages (%d races)\n", nraces); if(pt_levels == 3) { _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |