aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kvm/ioapic.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/x86/kvm/ioapic.c b/arch/x86/kvm/ioapic.c
index 5f42d038fcb4..c7220ba94aa7 100644
--- a/arch/x86/kvm/ioapic.c
+++ b/arch/x86/kvm/ioapic.c
@@ -109,6 +109,7 @@ static void __rtc_irq_eoi_tracking_restore_one(struct kvm_vcpu *vcpu)
109{ 109{
110 bool new_val, old_val; 110 bool new_val, old_val;
111 struct kvm_ioapic *ioapic = vcpu->kvm->arch.vioapic; 111 struct kvm_ioapic *ioapic = vcpu->kvm->arch.vioapic;
112 struct dest_map *dest_map = &ioapic->rtc_status.dest_map;
112 union kvm_ioapic_redirect_entry *e; 113 union kvm_ioapic_redirect_entry *e;
113 114
114 e = &ioapic->redirtbl[RTC_GSI]; 115 e = &ioapic->redirtbl[RTC_GSI];
@@ -117,16 +118,17 @@ static void __rtc_irq_eoi_tracking_restore_one(struct kvm_vcpu *vcpu)
117 return; 118 return;
118 119
119 new_val = kvm_apic_pending_eoi(vcpu, e->fields.vector); 120 new_val = kvm_apic_pending_eoi(vcpu, e->fields.vector);
120 old_val = test_bit(vcpu->vcpu_id, ioapic->rtc_status.dest_map.map); 121 old_val = test_bit(vcpu->vcpu_id, dest_map->map);
121 122
122 if (new_val == old_val) 123 if (new_val == old_val)
123 return; 124 return;
124 125
125 if (new_val) { 126 if (new_val) {
126 __set_bit(vcpu->vcpu_id, ioapic->rtc_status.dest_map.map); 127 __set_bit(vcpu->vcpu_id, dest_map->map);
128 dest_map->vectors[vcpu->vcpu_id] = e->fields.vector;
127 ioapic->rtc_status.pending_eoi++; 129 ioapic->rtc_status.pending_eoi++;
128 } else { 130 } else {
129 __clear_bit(vcpu->vcpu_id, ioapic->rtc_status.dest_map.map); 131 __clear_bit(vcpu->vcpu_id, dest_map->map);
130 ioapic->rtc_status.pending_eoi--; 132 ioapic->rtc_status.pending_eoi--;
131 rtc_status_pending_eoi_check_valid(ioapic); 133 rtc_status_pending_eoi_check_valid(ioapic);
132 } 134 }