mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
Merge remote-tracking branch 'quintela/migration.next' into staging
# By Michael R. Hines (8) and others # Via Juan Quintela * quintela/migration.next: migration: add autoconvergence documentation Fix real mode guest segments dpl value in savevm Fix real mode guest migration rdma: account for the time spent in MIG_STATE_SETUP through QMP rdma: introduce MIG_STATE_NONE and change MIG_STATE_SETUP state transition rdma: allow state transitions between other states besides ACTIVE rdma: send pc.ram rdma: core logic rdma: introduce ram_handle_compressed() rdma: bugfix: ram_control_save_page() rdma: update documentation to reflect new unpin support Message-id: 1374590725-14144-1-git-send-email-quintela@redhat.com Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
commit
f03d07d468
11 changed files with 3467 additions and 47 deletions
|
@ -252,6 +252,24 @@ static void cpu_pre_save(void *opaque)
|
|||
}
|
||||
|
||||
env->fpregs_format_vmstate = 0;
|
||||
|
||||
/*
|
||||
* Real mode guest segments register DPL should be zero.
|
||||
* Older KVM version were setting it wrongly.
|
||||
* Fixing it will allow live migration to host with unrestricted guest
|
||||
* support (otherwise the migration will fail with invalid guest state
|
||||
* error).
|
||||
*/
|
||||
if (!(env->cr[0] & CR0_PE_MASK) &&
|
||||
(env->segs[R_CS].flags >> DESC_DPL_SHIFT & 3) != 0) {
|
||||
env->segs[R_CS].flags &= ~(env->segs[R_CS].flags & DESC_DPL_MASK);
|
||||
env->segs[R_DS].flags &= ~(env->segs[R_DS].flags & DESC_DPL_MASK);
|
||||
env->segs[R_ES].flags &= ~(env->segs[R_ES].flags & DESC_DPL_MASK);
|
||||
env->segs[R_FS].flags &= ~(env->segs[R_FS].flags & DESC_DPL_MASK);
|
||||
env->segs[R_GS].flags &= ~(env->segs[R_GS].flags & DESC_DPL_MASK);
|
||||
env->segs[R_SS].flags &= ~(env->segs[R_SS].flags & DESC_DPL_MASK);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static int cpu_post_load(void *opaque, int version_id)
|
||||
|
@ -260,6 +278,24 @@ static int cpu_post_load(void *opaque, int version_id)
|
|||
CPUX86State *env = &cpu->env;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Real mode guest segments register DPL should be zero.
|
||||
* Older KVM version were setting it wrongly.
|
||||
* Fixing it will allow live migration from such host that don't have
|
||||
* restricted guest support to a host with unrestricted guest support
|
||||
* (otherwise the migration will fail with invalid guest state
|
||||
* error).
|
||||
*/
|
||||
if (!(env->cr[0] & CR0_PE_MASK) &&
|
||||
(env->segs[R_CS].flags >> DESC_DPL_SHIFT & 3) != 0) {
|
||||
env->segs[R_CS].flags &= ~(env->segs[R_CS].flags & DESC_DPL_MASK);
|
||||
env->segs[R_DS].flags &= ~(env->segs[R_DS].flags & DESC_DPL_MASK);
|
||||
env->segs[R_ES].flags &= ~(env->segs[R_ES].flags & DESC_DPL_MASK);
|
||||
env->segs[R_FS].flags &= ~(env->segs[R_FS].flags & DESC_DPL_MASK);
|
||||
env->segs[R_GS].flags &= ~(env->segs[R_GS].flags & DESC_DPL_MASK);
|
||||
env->segs[R_SS].flags &= ~(env->segs[R_SS].flags & DESC_DPL_MASK);
|
||||
}
|
||||
|
||||
/* XXX: restore FPU round state */
|
||||
env->fpstt = (env->fpus_vmstate >> 11) & 7;
|
||||
env->fpus = env->fpus_vmstate & ~0x3800;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue