On Fri, Aug 23, 2013 at 01:26:00PM +0100, James Hogan wrote: > When a KVM internal error occurs QEMU dumps the CPU state, however it > doesn't synchronise the state from KVM first so the dumped state is out > of date. Add the synchronisation calls before the dump in both locations > (which is used depends on whether the arch says to stop or not). > x86_cpu_dump_state() calls cpu_synchronize_state() already. > Note that x86 does a sync in its kvm_arch_stop_on_emulation_error() > function so at least for emulation errors is unaffected. > > Signed-off-by: James Hogan <james.hogan@xxxxxxxxxx> > Cc: Gleb Natapov <gleb@xxxxxxxxxx> > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Cc: kvm@xxxxxxxxxxxxxxx > --- > kvm-all.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/kvm-all.c b/kvm-all.c > index b788fcd..803141a 100644 > --- a/kvm-all.c > +++ b/kvm-all.c > @@ -1546,6 +1546,7 @@ static int kvm_handle_internal_error(CPUState *cpu, struct kvm_run *run) > if (run->internal.suberror == KVM_INTERNAL_ERROR_EMULATION) { > fprintf(stderr, "emulation failure\n"); > if (!kvm_arch_stop_on_emulation_error(cpu)) { > + kvm_cpu_synchronize_state(cpu); > cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_CODE); > return EXCP_INTERRUPT; > } > @@ -1701,6 +1702,7 @@ int kvm_cpu_exec(CPUState *cpu) > } while (ret == 0); > > if (ret < 0) { > + kvm_cpu_synchronize_state(cpu); > cpu_dump_state(cpu, stderr, fprintf, CPU_DUMP_CODE); > vm_stop(RUN_STATE_INTERNAL_ERROR); > } > -- > 1.8.1.2 > -- Gleb. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html