mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: Permit PCI-free aarch64 mach-virt guests
There has been some progress lately in enabling virtio-pci on aarch64 guests; however, guest OS support is still spotty at best, so most guests are going to be using virtio-mmio instead. Currently, mach-virt guests are closely modeled after q35 guests, and that includes always adding a dmi-to-pci-bridge that's just impossible to get rid of. While that's acceptable (if suboptimal) for q35, where you will always need some kind of PCI device anyway, mach-virt guests should be allowed to avoid it.
This commit is contained in:
parent
9e155e1d8a
commit
86a68bdb0c
@ -1951,11 +1951,15 @@ qemuDomainDefAddDefaultDevices(virDomainDefPtr def,
|
||||
VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT)) {
|
||||
goto cleanup;
|
||||
}
|
||||
/* add a dmi-to-pci-bridge and a pci-bridge if there are no pci controllers
|
||||
/* Add a dmi-to-pci-bridge bridge if there are no PCI controllers
|
||||
* other than the pcie-root. This is so that there will be hot-pluggable
|
||||
* PCI slots available
|
||||
* PCI slots available.
|
||||
*
|
||||
* We skip this step for aarch64 mach-virt guests, where we want to
|
||||
* be able to have a pure virtio-mmio topology
|
||||
*/
|
||||
if (virDomainControllerFind(def, VIR_DOMAIN_CONTROLLER_TYPE_PCI, 1) < 0 &&
|
||||
!qemuDomainMachineIsVirt(def) &&
|
||||
!virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_PCI, 1,
|
||||
VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE))
|
||||
goto cleanup;
|
||||
|
@ -1483,9 +1483,15 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
|
||||
}
|
||||
|
||||
/* Reserve 1 extra slot for a (potential) bridge only if buses
|
||||
* are not fully reserved yet
|
||||
* are not fully reserved yet.
|
||||
*
|
||||
* We don't reserve the extra slot for aarch64 mach-virt guests
|
||||
* either because we want to be able to have pure virtio-mmio
|
||||
* guests, and reserving this slot would force us to add at least
|
||||
* a dmi-to-pci-bridge to an otherwise PCI-free topology
|
||||
*/
|
||||
if (!buses_reserved &&
|
||||
!qemuDomainMachineIsVirt(def) &&
|
||||
virDomainPCIAddressReserveNextSlot(addrs, &info, flags) < 0)
|
||||
goto cleanup;
|
||||
|
||||
|
@ -21,7 +21,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-initrd /aarch64.initrd \
|
||||
-append 'earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait' \
|
||||
-dtb /aarch64.dtb \
|
||||
-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1 \
|
||||
-device virtio-serial-device,id=virtio-serial0 \
|
||||
-usb \
|
||||
-drive file=/aarch64.raw,format=raw,if=none,id=drive-virtio-disk0 \
|
||||
|
@ -21,7 +21,6 @@ QEMU_AUDIO_DRV=none \
|
||||
-initrd /aarch64.initrd \
|
||||
-append 'earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait' \
|
||||
-dtb /aarch64.dtb \
|
||||
-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1 \
|
||||
-device virtio-serial-device,id=virtio-serial0 \
|
||||
-usb \
|
||||
-drive file=/aarch64.raw,format=raw,if=none,id=drive-virtio-disk0 \
|
||||
|
@ -23,12 +23,13 @@ QEMU_AUDIO_DRV=none \
|
||||
-dtb /aarch64.dtb \
|
||||
-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1 \
|
||||
-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x0 \
|
||||
-device virtio-scsi-pci,id=scsi0,bus=pcie.0,addr=0x3 \
|
||||
-device pci-bridge,chassis_nr=3,id=pci.3,bus=pci.1,addr=0x1 \
|
||||
-device virtio-scsi-pci,id=scsi0,bus=pci.3,addr=0x1 \
|
||||
-usb \
|
||||
-drive file=/aarch64.raw,format=raw,if=none,id=drive-scsi0-0-0-0 \
|
||||
-device scsi-disk,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,\
|
||||
id=scsi0-0-0-0 \
|
||||
-device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:09:a4:37,bus=pcie.0,addr=0x2 \
|
||||
-device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:09:a4:37,bus=pci.3,addr=0x2 \
|
||||
-net user,vlan=0,name=hostnet0 \
|
||||
-device virtio-net-pci,vlan=1,id=net1,mac=52:54:00:09:a4:38,bus=pci.2,addr=0x1 \
|
||||
-net user,vlan=1,name=hostnet1
|
||||
|
@ -31,13 +31,23 @@
|
||||
<target dev='sda' bus='scsi'/>
|
||||
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pcie-root'/>
|
||||
<controller type='pci' index='1' model='dmi-to-pci-bridge'>
|
||||
<model name='i82801b11-bridge'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
|
||||
</controller>
|
||||
<controller type='pci' index='2' model='pci-bridge'>
|
||||
<model name='pci-bridge'/>
|
||||
<target chassisNr='2'/>
|
||||
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||
</controller>
|
||||
<controller type='scsi' index='0' model='virtio-scsi'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||
<address type='pci' domain='0x0000' bus='0x03' slot='0x01' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='user'>
|
||||
<mac address='52:54:00:09:a4:37'/>
|
||||
<model type='virtio'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
<address type='pci' domain='0x0000' bus='0x03' slot='0x02' function='0x0'/>
|
||||
</interface>
|
||||
<interface type='user'>
|
||||
<mac address='52:54:00:09:a4:38'/>
|
||||
|
@ -33,10 +33,6 @@
|
||||
<address type='virtio-mmio'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pcie-root'/>
|
||||
<controller type='pci' index='1' model='dmi-to-pci-bridge'>
|
||||
<model name='i82801b11-bridge'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
|
||||
</controller>
|
||||
<controller type='virtio-serial' index='0'>
|
||||
<address type='virtio-mmio'/>
|
||||
</controller>
|
||||
|
@ -32,9 +32,6 @@
|
||||
<target dev='sda' bus='scsi'/>
|
||||
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
</disk>
|
||||
<controller type='scsi' index='0' model='virtio-scsi'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||
</controller>
|
||||
<controller type='pci' index='0' model='pcie-root'/>
|
||||
<controller type='pci' index='1' model='dmi-to-pci-bridge'>
|
||||
<model name='i82801b11-bridge'/>
|
||||
@ -45,10 +42,18 @@
|
||||
<target chassisNr='2'/>
|
||||
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||
</controller>
|
||||
<controller type='scsi' index='0' model='virtio-scsi'>
|
||||
<address type='pci' domain='0x0000' bus='0x03' slot='0x01' function='0x0'/>
|
||||
</controller>
|
||||
<controller type='pci' index='3' model='pci-bridge'>
|
||||
<model name='pci-bridge'/>
|
||||
<target chassisNr='3'/>
|
||||
<address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='user'>
|
||||
<mac address='52:54:00:09:a4:37'/>
|
||||
<model type='virtio'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
<address type='pci' domain='0x0000' bus='0x03' slot='0x02' function='0x0'/>
|
||||
</interface>
|
||||
<interface type='user'>
|
||||
<mac address='52:54:00:09:a4:38'/>
|
||||
|
Loading…
x
Reference in New Issue
Block a user