struct apic_irq_message has a valid field, make sure to call
apic_send_irq only in cases where this bit is set. This protects us
against sending invalid interrupts during handover when the Linux setup
should ever be broken.
Signed-off-by: Henning Schild <henning.schild@siemens.com>
[Jan: extended commit description]
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
static void ioapic_mask_pins(struct cell *cell, u64 pin_bitmap,
enum ioapic_handover handover)
{
+ struct apic_irq_message irq_msg;
union ioapic_redir_entry entry;
unsigned int pin, reg;
* interrupts.
*/
entry = shadow_redir_table[pin];
- apic_send_irq(ioapic_translate_redir_entry(cell, pin,
- entry));
+ irq_msg = ioapic_translate_redir_entry(cell, pin,
+ entry);
+ if (irq_msg.valid)
+ apic_send_irq(irq_msg);
}
}
}
msi = pci_get_x86_msi_vector(device);
for (n = 0; n < vectors; n++) {
irq_msg = pci_translate_msi_vector(device, n, vectors, msi);
- apic_send_irq(irq_msg);
+ if (irq_msg.valid)
+ apic_send_irq(irq_msg);
}
}