Skip to contentSkip to conversation

KVM: x86: Fix eflags corruption in kvm mode

PATCH Applied Jan Kiszka 2 participants 4 messages Feb 19, 2010 – Feb 22, 2010 KVM

lore
Share & tools
lore

Jan Kiszka

author
#0 lore raw

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
index 6a290fd..4029ea2 100644
@@ -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;
Applied
#1 lore raw
Quoted 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
author
#2 lore raw
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
#3 lore raw
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