Avoid delivering APIC message to non-exist VCPU and fixes booting 32bit PAE guest issue. against lapic2 branch.
Signed-off-by: Yaozu (Eddie) Dong <[EMAIL PROTECTED]> diff --git a/drivers/kvm/ioapic.c b/drivers/kvm/ioapic.c index 7c5a6ea..6c734db 100644 --- a/drivers/kvm/ioapic.c +++ b/drivers/kvm/ioapic.c @@ -151,12 +151,14 @@ static u32 ioapic_get_delivery_bitmask(struct kvm_ioapic *ioapic, u8 dest, if (dest_mode == 0) { /* Physical mode. */ if (dest == 0xFF) { /* Broadcast. */ for (i = 0; i < KVM_MAX_VCPUS; ++i) - mask |= 1 << i; + if (kvm->vcpus[i].apic) + mask |= 1 << i; return mask; } for (i = 0; i < KVM_MAX_VCPUS; ++i) { vcpu = &kvm->vcpus[i]; - if (kvm_apic_match_physical_addr(vcpu->apic, dest)) { + if (vcpu->apic && + kvm_apic_match_physical_addr(vcpu->apic, dest)) { mask = 1 << vcpu->vcpu_id; break; } @@ -164,7 +166,8 @@ static u32 ioapic_get_delivery_bitmask(struct kvm_ioapic *ioapic, u8 dest, } else if (dest != 0) /* Logical mode, MDA non-zero. */ for (i = 0; i < KVM_MAX_VCPUS; ++i) { vcpu = &kvm->vcpus[i]; - if (kvm_apic_match_logical_addr(vcpu->apic, dest)) + if (vcpu->apic && + kvm_apic_match_logical_addr(vcpu->apic, dest)) mask |= 1 << vcpu->vcpu_id; } ioapic_debug("mask %x", mask); diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c diff --git a/drivers/kvm/lapic.c b/drivers/kvm/lapic.c index 0eb8895..1f1fa89 100644 --- a/drivers/kvm/lapic.c +++ b/drivers/kvm/lapic.c @@ -260,8 +260,7 @@ static int apic_match_dest(struct kvm_vcpu *vcpu, struct kvm_lapic *source, "dest_mode 0x%x, short_hand 0x%x", target, source, dest, dest_mode, short_hand); - if (!target) - return 0; + ASSERT(!target); switch (short_hand) { case APIC_DEST_NOSHORT: if (dest_mode == 0) { @@ -421,7 +420,8 @@ static void apic_send_ipi(struct kvm_lapic *apic) for (i = 0; i < KVM_MAX_VCPUS; i++) { vcpu = &apic->vcpu->kvm->vcpus[i]; - if (apic_match_dest(vcpu, apic, short_hand, dest, dest_mode)) { + if (vcpu->apic && + apic_match_dest(vcpu, apic, short_hand, dest, dest_mode)) { if (delivery_mode == APIC_DM_LOWEST) set_bit(vcpu->vcpu_id, &lpr_map); else diff --git a/drivers/kvm/vmx.c b/drivers/kvm/vmx.c
irqchip-fix1.patch
Description: irqchip-fix1.patch
------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel