pci/aer: factor out common code

Same logic is used to assert interrupts
and send msix messages, so add a static functin for this.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Michael S. Tsirkin 2010-12-08 17:46:28 +09:00
parent 5f47c187d9
commit 513691b7ff

View File

@ -273,6 +273,17 @@ static uint32_t pcie_aer_status_to_cmd(uint32_t status)
return cmd; return cmd;
} }
static void pcie_aer_root_notify(PCIDevice *dev)
{
if (msix_enabled(dev)) {
msix_notify(dev, pcie_aer_root_get_vector(dev));
} else if (msi_enabled(dev)) {
msi_notify(dev, pcie_aer_root_get_vector(dev));
} else {
qemu_set_irq(dev->irq[dev->exp.aer_intx], 1);
}
}
/* /*
* 6.2.6 Error Message Control * 6.2.6 Error Message Control
* Figure 6-3 * Figure 6-3
@ -344,13 +355,7 @@ static void pcie_aer_msg_root_port(PCIDevice *dev, const PCIEAERMsg *msg)
return; return;
} }
if (msix_enabled(dev)) { pcie_aer_root_notify(dev);
msix_notify(dev, pcie_aer_root_get_vector(dev));
} else if (msi_enabled(dev)) {
msi_notify(dev, pcie_aer_root_get_vector(dev));
} else {
qemu_set_irq(dev->irq[dev->exp.aer_intx], 1);
}
} }
/* /*
@ -760,13 +765,7 @@ void pcie_aer_root_write_config(PCIDevice *dev,
return; return;
} }
if (msix_enabled(dev)) { pcie_aer_root_notify(dev);
msix_notify(dev, pcie_aer_root_get_vector(dev));
} else if (msi_enabled(dev)) {
msi_notify(dev, pcie_aer_root_get_vector(dev));
} else {
abort();
}
} }
static const VMStateDescription vmstate_pcie_aer_err = { static const VMStateDescription vmstate_pcie_aer_err = {