]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - virt/kvm/ioapic.c
KVM: Set TMR when programming ioapic entry
[karo-tx-linux.git] / virt / kvm / ioapic.c
index f2157a985a1f9ded86be0169ac28bab03cc8d947..2d682977ce82656bd29a9a915fced16174163db3 100644 (file)
@@ -193,7 +193,8 @@ static void update_handled_vectors(struct kvm_ioapic *ioapic)
        smp_wmb();
 }
 
-void kvm_ioapic_scan_entry(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap)
+void kvm_ioapic_scan_entry(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap,
+                       u32 *tmr)
 {
        struct kvm_ioapic *ioapic = vcpu->kvm->arch.vioapic;
        union kvm_ioapic_redirect_entry *e;
@@ -207,8 +208,13 @@ void kvm_ioapic_scan_entry(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap)
                         kvm_irq_has_notifier(ioapic->kvm, KVM_IRQCHIP_IOAPIC,
                                 index) || index == RTC_GSI)) {
                        if (kvm_apic_match_dest(vcpu, NULL, 0,
-                               e->fields.dest_id, e->fields.dest_mode))
-                               __set_bit(e->fields.vector, (unsigned long *)eoi_exit_bitmap);
+                               e->fields.dest_id, e->fields.dest_mode)) {
+                               __set_bit(e->fields.vector,
+                                       (unsigned long *)eoi_exit_bitmap);
+                               if (e->fields.trig_mode == IOAPIC_LEVEL_TRIG)
+                                       __set_bit(e->fields.vector,
+                                               (unsigned long *)tmr);
+                       }
                }
        }
        spin_unlock(&ioapic->lock);