diff options
| -rw-r--r-- | virt/kvm/irq_comm.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c index be8aba791554..c516d618d389 100644 --- a/virt/kvm/irq_comm.c +++ b/virt/kvm/irq_comm.c | |||
| @@ -48,7 +48,7 @@ static int kvm_set_ioapic_irq(struct kvm_kernel_irq_routing_entry *e, | |||
| 48 | static int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e, | 48 | static int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e, |
| 49 | struct kvm *kvm, int level) | 49 | struct kvm *kvm, int level) |
| 50 | { | 50 | { |
| 51 | int vcpu_id; | 51 | int vcpu_id, r = -1; |
| 52 | struct kvm_vcpu *vcpu; | 52 | struct kvm_vcpu *vcpu; |
| 53 | struct kvm_ioapic *ioapic = ioapic_irqchip(kvm); | 53 | struct kvm_ioapic *ioapic = ioapic_irqchip(kvm); |
| 54 | int dest_id = (e->msi.address_lo & MSI_ADDR_DEST_ID_MASK) | 54 | int dest_id = (e->msi.address_lo & MSI_ADDR_DEST_ID_MASK) |
| @@ -73,7 +73,7 @@ static int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e, | |||
| 73 | vcpu = kvm_get_lowest_prio_vcpu(ioapic->kvm, vector, | 73 | vcpu = kvm_get_lowest_prio_vcpu(ioapic->kvm, vector, |
| 74 | deliver_bitmask); | 74 | deliver_bitmask); |
| 75 | if (vcpu != NULL) | 75 | if (vcpu != NULL) |
| 76 | kvm_apic_set_irq(vcpu, vector, trig_mode); | 76 | r = kvm_apic_set_irq(vcpu, vector, trig_mode); |
| 77 | else | 77 | else |
| 78 | printk(KERN_INFO "kvm: null lowest priority vcpu!\n"); | 78 | printk(KERN_INFO "kvm: null lowest priority vcpu!\n"); |
| 79 | break; | 79 | break; |
| @@ -83,14 +83,17 @@ static int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e, | |||
| 83 | continue; | 83 | continue; |
| 84 | deliver_bitmask &= ~(1 << vcpu_id); | 84 | deliver_bitmask &= ~(1 << vcpu_id); |
| 85 | vcpu = ioapic->kvm->vcpus[vcpu_id]; | 85 | vcpu = ioapic->kvm->vcpus[vcpu_id]; |
| 86 | if (vcpu) | 86 | if (vcpu) { |
| 87 | kvm_apic_set_irq(vcpu, vector, trig_mode); | 87 | if (r < 0) |
| 88 | r = 0; | ||
| 89 | r += kvm_apic_set_irq(vcpu, vector, trig_mode); | ||
| 90 | } | ||
| 88 | } | 91 | } |
| 89 | break; | 92 | break; |
| 90 | default: | 93 | default: |
| 91 | break; | 94 | break; |
| 92 | } | 95 | } |
| 93 | return 1; | 96 | return r; |
| 94 | } | 97 | } |
| 95 | 98 | ||
| 96 | /* This should be called with the kvm->lock mutex held | 99 | /* This should be called with the kvm->lock mutex held |
