KVM: x86: Fix eflags corruption in kvm mode
PATCH 1/1 KVM: x86: Fix eflags corruption in kvm mode
This should explain a lot of the weird breakages of upstream KVM we've seen recently (actually we should have seen it much earlier):
Stop translating eflags into TCG format when in kvm mode as we never translate it back and rather sync this broken state into the kernel.
---
qemu-kvm is not affected as it has it own cpu loop - maybe the way to go for upstream as well on the long-term.
cpu-exec.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-)
cpu-exec.c +7 -5
@@ -228,11 +228,13 @@ int cpu_exec(CPUState *env1) env = env1;#if defined(TARGET_I386 ) -/* put eflags in CPU temporary format */ -CC_SRC = env->eflags & (CC_O |CC_S |CC_Z |CC_A |CC_P |CC_C ); -DF =1 - (2 * ((env->eflags >>10 ) &1 )); -CC_OP =CC_OP_EFLAGS ; - env->eflags &= ~(DF_MASK |CC_O |CC_S |CC_Z |CC_A |CC_P |CC_C ); +if (!kvm_enabled ()) { +/* put eflags in CPU temporary format */ +CC_SRC = env->eflags & (CC_O |CC_S |CC_Z |CC_A |CC_P |CC_C ); +DF =1 - (2 * ((env->eflags >>10 ) &1 )); +CC_OP =CC_OP_EFLAGS ; + env->eflags &= ~(DF_MASK |CC_O |CC_S |CC_Z |CC_A |CC_P |CC_C ); + }#elif defined(TARGET_SPARC )#elif defined(TARGET_M68K ) env->cc_op =CC_OP_FLAGS ;
Avi Kivity
AppliedQuoted 7 lines · Jan Kiszka
This should explain a lot of the weird breakages of upstream KVM we've seen recently (actually we should have seen it much earlier):
Stop translating eflags into TCG format when in kvm mode as we never translate it back and rather sync this broken state into the kernel.
Applied to uq/master and uq/stable-0.12, thanks (though realistically 0.12 kvm users should stick with qemu-kvm).
Quoted 4 lines
qemu-kvm is not affected as it has it own cpu loop - maybe the way to go for upstream as well on the long-term.
Or use a skeleton main loop and a function pointer table, like kvm does with vmx and svm.
Signature · 1 line
error compiling committee.c: too many arguments to function
Quoted 4 lines · Avi Kivity
Quoted 3 lines · Jan Kiszka
This should explain a lot of the weird breakages of upstream KVM we've seen recently (actually we should have seen it much earlier):
Quoted 8 lines
Quoted 4 lines
Stop translating eflags into TCG format when in kvm mode as we never translate it back and rather sync this broken state into the kernel.
Applied to uq/master and uq/stable-0.12, thanks (though realistically 0.12 kvm users should stick with qemu-kvm).
Actually, I would prefer if more "light" kvm users (no demanding performance requirements, no dependency on qemu-kvm-only features) consider upstream instead of qemu-kvm so that it gains way more testing than just by us when pushing some more bits. So we should keep on informing people about limitations and known issues. We need them on both sides.
Jan
Signature · 2 lines
Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux
Quoted 16 lines · Jan Kiszka
Quoted 5 lines · Avi Kivity
Quoted 3 lines · Jan Kiszka
This should explain a lot of the weird breakages of upstream KVM we've seen recently (actually we should have seen it much earlier):
Quoted 9 lines
Quoted 5 lines
Stop translating eflags into TCG format when in kvm mode as we never translate it back and rather sync this broken state into the kernel.
Applied to uq/master and uq/stable-0.12, thanks (though realistically 0.12 kvm users should stick with qemu-kvm).
Quoted 8 lines
Actually, I would prefer if more "light" kvm users (no demanding performance requirements, no dependency on qemu-kvm-only features) consider upstream instead of qemu-kvm so that it gains way more testing than just by us when pushing some more bits. So we should keep on informing people about limitations and known issues. We need them on both sides.
Agreed.
Signature · 1 line
error compiling committee.c: too many arguments to function