mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/HVM: don't mark external IRQs as pending when vLAPIC is disabled
In software-disabled state an LAPIC does not accept any interrupt requests and hence no IRR bit would newly become set while in this state. As a result it is also wrong for us to mark IO-APIC or MSI originating vectors as having a pending request when the vLAPIC is in this state. Such interrupts are simply lost. Introduce (IO-APIC) or re-use (MSI) a local variable to help readability. Fixes:4fe21ad371("This patch add virtual IOAPIC support for VMX guest") Fixes:85715f4bc7("MSI 5/6: add MSI support to passthrough HVM domain") Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com> master commit:f1d7aac1e3master date: 2022-12-02 10:35:01 +0100
This commit is contained in:
1 parent
09849cdd25
commit
07bbac08b5
2 files changed
+13
-6
No files matched your search
@@ -460,9 +460,14 @@ static void vioapic_deliver(struct hvm_vioapic *vioapic, unsigned int pin)
|
||||
|
||||
case dest_Fixed:
|
||||
for_each_vcpu ( d, v )
|
||||
if ( vlapic_match_dest(vcpu_vlapic(v), NULL, 0, dest, dest_mode) )
|
||||
ioapic_inj_irq(vioapic, vcpu_vlapic(v), vector, trig_mode,
|
||||
{
|
||||
struct vlapic *vlapic = vcpu_vlapic(v);
|
||||
|
||||
if ( vlapic_enabled(vlapic) &&
|
||||
vlapic_match_dest(vlapic, NULL, 0, dest, dest_mode) )
|
||||
ioapic_inj_irq(vioapic, vlapic, vector, trig_mode,
|
||||
delivery_mode);
|
||||
}
|
||||
break;
|
||||
|
||||
case dest_NMI:
|
||||
|
||||
@@ -87,10 +87,12 @@ int vmsi_deliver(
|
||||
|
||||
case dest_Fixed:
|
||||
for_each_vcpu ( d, v )
|
||||
if ( vlapic_match_dest(vcpu_vlapic(v), NULL,
|
||||
0, dest, dest_mode) )
|
||||
vmsi_inj_irq(vcpu_vlapic(v), vector,
|
||||
trig_mode, delivery_mode);
|
||||
{
|
||||
target = vcpu_vlapic(v);
|
||||
if ( vlapic_enabled(target) &&
|
||||
vlapic_match_dest(target, NULL, 0, dest, dest_mode) )
|
||||
vmsi_inj_irq(target, vector, trig_mode, delivery_mode);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||