diff options
Diffstat (limited to 'virt')
-rw-r--r-- | virt/kvm/ioapic.c | 4 | ||||
-rw-r--r-- | virt/kvm/kvm_main.c | 2 |
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 */ |