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: f1d7aac1e3
master date: 2022-12-02 10:35:01 +0100
This commit is contained in:
Jan Beulich committed 2022-12-08 10:11:32 +01:00
1 parent 09849cdd25
commit 07bbac08b5
2 files changed
+13 -6

No files matched your search

+7 -2
View File
@@ -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:
+6 -4
View File
@@ -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:
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.