W dniu 2014-07-31 13:27, Marcin Gibuła pisze:
Can you dump *env before and after the call to kvm_arch_get_registers?
Yes, but it seems they are equal - I used memcmp() to compare them. Is
there any other side effect that cpu_synchronize_all_states() may have?
I think I found it.
The reason for hang is, because when second call to
kvm_arch_get_registers() is skipped, it also skips kvm_get_apic() which
updates cpu->apic_state.
Paolo,
is this analysis deep enough for you? I don't know if that can be fixed
with existing api as cpu_synchronize_all_states() is all or nothing kind
of stuff.
Kvmclock needs it only to read current cpu registers, so syncing
everything is not really necessary. Perhaps exporting one of
kvm_arch_get_* would be enough. And it wouldn't mess with lazy get/put.
On the other hand, if in future any other driver adds
cpu_synchronize_all_states() in its change state callback it could
result in same error so perhaps more generic approach is needed.
--
mg