# HG changeset patch
# User smh22@xxxxxxxxxxxxxxxxxxxx
# Node ID 486f4c9e1c22b64c33c4b83e7e675eecc83cde00
# Parent 001ba14fbb1bcc91d4e02e70d5c64d661870c398
Fix save/restore and migrate on x86_64.
Signed-off-by: Steven Hand <steven@xxxxxxxxxxxxx>
diff -r 001ba14fbb1b -r 486f4c9e1c22 tools/libxc/xc_linux_save.c
--- a/tools/libxc/xc_linux_save.c Sat Nov 26 10:32:57 2005
+++ b/tools/libxc/xc_linux_save.c Sat Nov 26 11:13:39 2005
@@ -457,6 +457,15 @@
xen_start = (hvirt_start >> L2_PAGETABLE_SHIFT_PAE) & 0x1ff;
}
+ if (pt_levels == 4 && type == L4TAB) {
+ /*
+ ** XXX SMH: should compute these from hvirt_start (which we have)
+ ** and hvirt_end (which we don't)
+ */
+ xen_start = 256;
+ xen_end = 272;
+ }
+
/* Now iterate through the page table, canonicalizing each PTE */
for (i = 0; i < pte_last; i++ ) {
@@ -721,12 +730,6 @@
}
/* Domain is still running at this point */
-
- if (live && (pt_levels == 4)) {
- ERR("Live migration not supported for 64-bit guests");
- live = 0;
- }
-
if (live) {
if (xc_shadow_control(xc_handle, dom,
@@ -811,7 +814,7 @@
for (i = 0; i < max_pfn; i++) {
mfn = live_p2m[i];
- if((mfn != 0xffffffffUL) && (mfn_to_pfn(mfn) != i)) {
+ if((mfn != INVALID_P2M_ENTRY) && (mfn_to_pfn(mfn) != i)) {
DPRINTF("i=0x%x mfn=%lx live_m2p=%lx\n", i,
mfn, mfn_to_pfn(mfn));
err++;
diff -r 001ba14fbb1b -r 486f4c9e1c22 tools/python/xen/xend/XendCheckpoint.py
--- a/tools/python/xen/xend/XendCheckpoint.py Sat Nov 26 10:32:57 2005
+++ b/tools/python/xen/xend/XendCheckpoint.py Sat Nov 26 11:13:39 2005
@@ -128,7 +128,7 @@
try:
l = read_exact(fd, sizeof_unsigned_long,
"not a valid guest state file: pfn count read")
- nr_pfns = unpack("=L", l)[0] # XXX endianess
+ nr_pfns = unpack("L", l)[0] # native sizeof long
if nr_pfns > 16*1024*1024: # XXX
raise XendError(
"not a valid guest state file: pfn count out of range")
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|