aboutsummaryrefslogtreecommitdiffstats
path: root/virt
diff options
context:
space:
mode:
Diffstat (limited to 'virt')
-rw-r--r--virt/kvm/ioapic.c4
-rw-r--r--virt/kvm/kvm_main.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
index 2a5667173995..0532fa68f5d1 100644
--- a/virt/kvm/ioapic.c
+++ b/virt/kvm/ioapic.c
@@ -164,7 +164,9 @@ static int ioapic_deliver(struct kvm_ioapic *ioapic, int irq)
164 /* Always delivery PIT interrupt to vcpu 0 */ 164 /* Always delivery PIT interrupt to vcpu 0 */
165 if (irq == 0) { 165 if (irq == 0) {
166 irqe.dest_mode = 0; /* Physical mode. */ 166 irqe.dest_mode = 0; /* Physical mode. */
167 irqe.dest_id = ioapic->kvm->vcpus[0]->vcpu_id; 167 /* need to read apic_id from apic regiest since
168 * it can be rewritten */
169 irqe.dest_id = ioapic->kvm->bsp_vcpu->vcpu_id;
168 } 170 }
169#endif 171#endif
170 return kvm_irq_delivery_to_apic(ioapic->kvm, NULL, &irqe); 172 return kvm_irq_delivery_to_apic(ioapic->kvm, NULL, &irqe);
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 0d481b282448..0d54edecbc70 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1747,6 +1747,8 @@ static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, int n)
1747 goto vcpu_destroy; 1747 goto vcpu_destroy;
1748 } 1748 }
1749 kvm->vcpus[n] = vcpu; 1749 kvm->vcpus[n] = vcpu;
1750 if (n == 0)
1751 kvm->bsp_vcpu = vcpu;
1750 mutex_unlock(&kvm->lock); 1752 mutex_unlock(&kvm->lock);
1751 1753
1752 /* Now it's all set up, let userspace reach it */ 1754 /* Now it's all set up, let userspace reach it */