Skip to contentSkip to conversation

QEMU/KVM: make kvm_arch_load_regs() aware of in kernel APIC

PATCH Applied Marcelo Tosatti 3 participants 3 messages Apr 3, 2008 – Apr 4, 2008 KVM

lore
Share & tools
lore
#0 lore raw

kvm_arch_load_regs() might load APIC base and APIC TPR from the uninitialized userspace APIC emulation.

This happened when running X11 on SMP guest in my case, disabling the APIC for vcpu3:

vcpu not ready for apic_round_robin
vcpu not ready for apic_round_robin
vcpu not ready for apic_round_robin
...

qemu/qemu-kvm-x86.c +8 -2
index 78490c5..401fbc6 100644
@@ -250,9 +250,15 @@ void kvm_arch_load_regs(CPUState *env)
     sregs.cr3 = env->cr[3];
     sregs.cr4 = env->cr[4];
 
-    sregs.apic_base = cpu_get_apic_base(env);
+    if (kvm_irqchip_in_kernel(kvm_context)) {
+        sregs.cr8 = kvm_get_cr8(kvm_context, env->cpu_index);
+        sregs.apic_base = kvm_get_apic_base(kvm_context, env->cpu_index);
+    } else {
+        sregs.cr8 = cpu_get_apic_tpr(env);
+        sregs.apic_base = cpu_get_apic_base(env);
+    }
+
     sregs.efer = env->efer;
-    sregs.cr8 = cpu_get_apic_tpr(env);
 
     kvm_set_sregs(kvm_context, env->cpu_index, &sregs);
 

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace

#1 lore raw
Quoted 10 lines · Marcelo Tosatti

kvm_arch_load_regs() might load APIC base and APIC TPR from the uninitialized userspace APIC emulation.

This happened when running X11 on SMP guest in my case, disabling the APIC for vcpu3:

vcpu not ready for apic_round_robin
vcpu not ready for apic_round_robin
vcpu not ready for apic_round_robin

With this patch applied, I can start up my fedora8 guest with SMP and I no longer get X11 video corruption.

Signature · 11 lines
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
(512) 838-9253   T/L: 678-9253
[email protected]

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
Applied
#2 lore raw
In reply to Marcelo Tosatti
Quoted 11 lines · Marcelo Tosatti

kvm_arch_load_regs() might load APIC base and APIC TPR from the uninitialized userspace APIC emulation.

This happened when running X11 on SMP guest in my case, disabling the APIC for vcpu3:

vcpu not ready for apic_round_robin
vcpu not ready for apic_round_robin
vcpu not ready for apic_round_robin
...

Applied, thanks.

Signature · 8 lines
Any sufficiently difficult bug is indistinguishable from a feature.


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace