The PCI MSI-X support for aarch64 is unfortunately not fully
functional (please see arch/aarch64/msi.cc for details). This causes
OSv to hang when running on QEMU in aarch64 emulated mode in both
virtio-blk and virtio-net waiting to receive PCI interrupt from
the hypervisor.
So for now this patch forces OSv to enable regular PCI
interrupt regardless if QEMU advertises a PCI device in MSI-X mode.
This actually makes both virtio-blk and virtio-net function properly
on QEMU with PCI devices. This means that OSv finally gets an IP address
and is able to mount a ROFS disk (ZFS has not been tested yet) and execute
an app from it.
Signed-off-by: Waldemar Kozaczuk <
jwkoz...@gmail.com>
---
drivers/virtio-pci-device.cc | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/virtio-pci-device.cc b/drivers/virtio-pci-device.cc
index 378332ff..c7420747 100644
--- a/drivers/virtio-pci-device.cc
+++ b/drivers/virtio-pci-device.cc
@@ -44,11 +44,17 @@ void virtio_pci_device::init()
void virtio_pci_device::register_interrupt(interrupt_factory irq_factory)
{
+#ifdef AARCH64_PORT_STUB
+ // Currently MSI-X support for aach64 is stubbed (please see arch/aarch64/msi.cc)
+ // so until it becomes functional we register regular PCI interrupt
+ _irq.reset(irq_factory.create_pci_interrupt(*_dev));
+#else
if (irq_factory.register_msi_bindings && _dev->is_msix()) {
irq_factory.register_msi_bindings(_msi);
} else {
_irq.reset(irq_factory.create_pci_interrupt(*_dev));
}
+#endif
}
virtio_legacy_pci_device::virtio_legacy_pci_device(pci::device *dev)
--
2.26.2