mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
Fix save/restore and migrate on x86_64.
Signed-off-by: Steven Hand <steven@xensource.com>
This commit is contained in:
1 parent
b0116a884d
commit
d8fa063ad2
2 files changed
+11
-8
No files matched your search
@@ -457,6 +457,15 @@ void canonicalize_pagetable(unsigned long type, unsigned long pfn,
|
||||
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 @@ int xc_linux_save(int xc_handle, int io_fd, uint32_t dom, uint32_t max_iters,
|
||||
}
|
||||
|
||||
/* 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 @@ int xc_linux_save(int xc_handle, int io_fd, uint32_t dom, uint32_t max_iters,
|
||||
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++;
|
||||
|
||||
@@ -128,7 +128,7 @@ def restore(xd, fd):
|
||||
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")
|
||||
|
||||