|
@@ -410,8 +410,6 @@ static inline int apic_find_highest_irr(struct kvm_lapic *apic)
|
|
|
if (!apic->irr_pending)
|
|
|
return -1;
|
|
|
|
|
|
- if (apic->vcpu->arch.apicv_active)
|
|
|
- kvm_x86_ops->sync_pir_to_irr(apic->vcpu);
|
|
|
result = apic_search_irr(apic);
|
|
|
ASSERT(result == -1 || result >= 16);
|
|
|
|
|
@@ -581,7 +579,10 @@ static void pv_eoi_clr_pending(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
static int apic_has_interrupt_for_ppr(struct kvm_lapic *apic, u32 ppr)
|
|
|
{
|
|
|
- int highest_irr = apic_find_highest_irr(apic);
|
|
|
+ int highest_irr;
|
|
|
+ if (apic->vcpu->arch.apicv_active)
|
|
|
+ kvm_x86_ops->sync_pir_to_irr(apic->vcpu);
|
|
|
+ highest_irr = apic_find_highest_irr(apic);
|
|
|
if (highest_irr == -1 || (highest_irr & 0xF0) <= ppr)
|
|
|
return -1;
|
|
|
return highest_irr;
|