kvm: pre-add 32 PCI controller for hot-plug issue on ARM64 (#5193)

On newer libvirt/qemu it seems PCI hot-plugging could be an issue as
seen in:

https://www.suse.com/support/kb/doc/?id=000019383
https://bugs.launchpad.net/nova/+bug/1836065

This was found to be true on ARM64/aarch64 platform (tested on
RaspberryPi4). As per the default machine doc, it advises to
pre-allocate PCI controllers on the machine and pcie-to-pci-bridge based
controller for legacy PCI models:
https://libvirt.org/pci-hotplug.html#x86_64-q35

This patch introduces the concept as a workaround until a proper fix is
done (ideally in the upstream libvirt/qemu projects). Until then client
code can add 32 PCI controllers and a pcie-to-pci-bridge controller for
aarch64 platforms.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
Rohit Yadav 2021-07-15 13:15:10 +05:30 committed by GitHub
parent e0141ab348
commit 5228fae7b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 0 deletions

View File

@ -530,6 +530,15 @@ public class LibvirtVMDef {
devicesBuilder.append(dev.toString());
}
}
if (_emulator != null && _emulator.endsWith("aarch64")) {
devicesBuilder.append("<controller type='pci' model='pcie-root'/>\n");
for (int i = 0; i < 32; i++) {
devicesBuilder.append("<controller type='pci' model='pcie-root-port'/>\n");
}
devicesBuilder.append("<controller type='pci' model='pcie-to-pci-bridge'/>\n");
}
devicesBuilder.append("</devices>\n");
return devicesBuilder.toString();
}