[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] hvm: Fix the realmode live migration issue with Intel EPT
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1213348405 -3600 # Node ID cb514522dab2a4c5453ce45bbd97f7b1c12449e0 # Parent 02b6977de4b5bcc173183e3f4aa836cd36f76160 hvm: Fix the realmode live migration issue with Intel EPT The patch save/restore the HVM_PARAM_IDENT_PT parameter, then the live migration during real mode with EPT may work fine. Signed-off-by: Xiaohui Xin <Xiaohui.xin@xxxxxxxxx> Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> --- tools/libxc/xc_domain_restore.c | 16 ++++++++++++++++ tools/libxc/xc_domain_save.c | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff -r 02b6977de4b5 -r cb514522dab2 tools/libxc/xc_domain_restore.c --- a/tools/libxc/xc_domain_restore.c Fri Jun 13 09:56:49 2008 +0100 +++ b/tools/libxc/xc_domain_restore.c Fri Jun 13 10:13:25 2008 +0100 @@ -474,6 +474,22 @@ int xc_domain_restore(int xc_handle, int continue; } + if ( j == -3 ) + { + uint64_t ident_pt; + + /* Skip padding 4 bytes then read the EPT identity PT location. */ + if ( read_exact(io_fd, &ident_pt, sizeof(uint32_t)) || + read_exact(io_fd, &ident_pt, sizeof(uint64_t)) ) + { + ERROR("error read the address of the EPT identity map"); + goto out; + } + + xc_set_hvm_param(xc_handle, dom, HVM_PARAM_IDENT_PT, ident_pt); + continue; + } + if ( j == 0 ) break; /* our work here is done */ diff -r 02b6977de4b5 -r cb514522dab2 tools/libxc/xc_domain_save.c --- a/tools/libxc/xc_domain_save.c Fri Jun 13 09:56:49 2008 +0100 +++ b/tools/libxc/xc_domain_save.c Fri Jun 13 10:13:25 2008 +0100 @@ -1429,6 +1429,25 @@ int xc_domain_save(int xc_handle, int io } } + if ( hvm ) + { + struct { + int minusthree; + uint32_t pad; + uint64_t ident_pt; + } chunk = { -3, 0 }; + + xc_get_hvm_param(xc_handle, dom, HVM_PARAM_IDENT_PT, + (unsigned long *)&chunk.ident_pt); + + if ( (chunk.ident_pt != 0) && + write_exact(io_fd, &chunk, sizeof(chunk)) ) + { + PERROR("Error when writing the ident_pt for EPT guest"); + goto out; + } + } + /* Zero terminate */ i = 0; if ( write_exact(io_fd, &i, sizeof(int)) ) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |