W dniu 2014-07-18 11:37, Paolo Bonzini pisze:
Il 18/07/2014 11:32, Marcin Gibuła ha scritto:

3) the next CPU entry will call kvm_arch_put_registers:

         if (cpu->kvm_vcpu_dirty) {
             kvm_arch_put_registers(cpu, KVM_PUT_RUNTIME_STATE);
             cpu->kvm_vcpu_dirty = false;
         }

But, I don't set cpu->kvm_vcpu_dirty anywhere (?).

Yeah, the next CPU entry will *not* call kvm_arch_put_registers with
your change.  It will call it with vanilla cpu_synchronize_all_states().

That's because in kvmclock, it's used only to read cpu registers, not edit them.

Now, because making this call "invisible" makes it work, I'm speculating that following happens:

[migration starts]
kvmclock: calls cpu_synchronize_all_states()
somewhere in qemu: completes IO
somewhere in qemu: calls cpu_synchronize_all_states() <- old state


Is it (or something similar) possible? I didn't dig deep enough into internals yet, but perhaps you could point if thats the right direction?

--
mg

Reply via email to