mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-09-09 09:14:57 +00:00
Previously libvirt would only add pci-bridge devices automatically when an address was requested for a device that required a legacy PCI slot and none was available. This patch expands that support to dmi-to-pci-bridge (which is needed in order to add a pci-bridge on a machine with a pcie-root), and pcie-root-port (which is needed to add a hotpluggable PCIe device). It does *not* automatically add pcie-switch-upstream-ports or pcie-switch-downstream-ports (and currently there are no plans for that). Given the existing code to auto-add pci-bridge devices, automatically adding pcie-root-ports is fairly straightforward. The dmi-to-pci-bridge support is a bit tricky though, for a few reasons: 1) Although the only reason to add a dmi-to-pci-bridge is so that there is a reasonable place to plug in a pci-bridge controller, most of the time it's not the presence of a pci-bridge *in the config* that triggers the requirement to add a dmi-to-pci-bridge. Rather, it is the presence of a legacy-PCI device in the config, which triggers auto-add of a pci-bridge, which triggers auto-add of a dmi-to-pci-bridge (this is handled in virDomainPCIAddressSetGrow() - if there's a request to add a pci-bridge we'll check if there is a suitable bus to plug it into; if not, we first add a dmi-to-pci-bridge). 2) Once there is already a single dmi-to-pci-bridge on the system, there won't be a need for any more, even if it's full, as long as there is a pci-bridge with an open slot - you can also plug pci-bridges into existing pci-bridges. So we have to make sure we don't add a dmi-to-pci-bridge unless there aren't any dmi-to-pci-bridges *or* any pci-bridges. 3) Although it is strongly discouraged, it is legal for a pci-bridge to be directly plugged into pcie-root, and we don't want to auto-add a dmi-to-pci-bridge if there is already a pci-bridge that's been forced directly into pcie-root. Although libvirt will now automatically create a dmi-to-pci-bridge when it's needed, the code still remains for now that forces a dmi-to-pci-bridge on all domains with pcie-root (in qemuDomainDefAddDefaultDevices()). That will be removed in a future patch. For now, the pcie-root-ports are added one to a slot, which is a bit wasteful and means it will fail after 31 total PCIe devices (30 if there are also some PCI devices), but helps keep the changeset down for this patch. A future patch will have 8 pcie-root-ports sharing the functions on a single slot.
58 lines
2.5 KiB
Plaintext
58 lines
2.5 KiB
Plaintext
LC_ALL=C \
|
|
PATH=/bin \
|
|
HOME=/home/test \
|
|
USER=test \
|
|
LOGNAME=test \
|
|
QEMU_AUDIO_DRV=none \
|
|
/usr/libexec/qemu-kvm \
|
|
-name q35-test \
|
|
-S \
|
|
-M q35 \
|
|
-m 2048 \
|
|
-smp 2,sockets=2,cores=1,threads=1 \
|
|
-uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \
|
|
-nographic \
|
|
-nodefaults \
|
|
-monitor unix:/tmp/lib/domain--1-q35-test/monitor.sock,server,nowait \
|
|
-no-acpi \
|
|
-boot c \
|
|
-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1e \
|
|
-device ioh3420,port=0x10,chassis=2,id=pci.2,bus=pcie.0,addr=0x2 \
|
|
-device ioh3420,port=0x18,chassis=3,id=pci.3,bus=pcie.0,addr=0x3 \
|
|
-device ioh3420,port=0x20,chassis=4,id=pci.4,bus=pcie.0,addr=0x4 \
|
|
-device ioh3420,port=0x28,chassis=5,id=pci.5,bus=pcie.0,addr=0x5 \
|
|
-device ioh3420,port=0x30,chassis=6,id=pci.6,bus=pcie.0,addr=0x6 \
|
|
-device ioh3420,port=0x38,chassis=7,id=pci.7,bus=pcie.0,addr=0x7 \
|
|
-device ioh3420,port=0x40,chassis=8,id=pci.8,bus=pcie.0,addr=0x8 \
|
|
-device ioh3420,port=0x48,chassis=9,id=pci.9,bus=pcie.0,addr=0x9 \
|
|
-device ioh3420,port=0x50,chassis=10,id=pci.10,bus=pcie.0,addr=0xa \
|
|
-device ioh3420,port=0x58,chassis=11,id=pci.11,bus=pcie.0,addr=0xb \
|
|
-device ioh3420,port=0x60,chassis=12,id=pci.12,bus=pcie.0,addr=0xc \
|
|
-device ioh3420,port=0x68,chassis=13,id=pci.13,bus=pcie.0,addr=0xd \
|
|
-device ioh3420,port=0x70,chassis=14,id=pci.14,bus=pcie.0,addr=0xe \
|
|
-device nec-usb-xhci,id=usb,bus=pci.7,addr=0x0 \
|
|
-device virtio-scsi-pci,id=scsi0,bus=pci.6,addr=0x0 \
|
|
-device virtio-serial-pci,id=virtio-serial0,bus=pci.5,addr=0x0 \
|
|
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk1 \
|
|
-device virtio-blk-pci,bus=pci.8,addr=0x0,drive=drive-virtio-disk1,\
|
|
id=virtio-disk1 \
|
|
-fsdev local,security_model=passthrough,id=fsdev-fs0,path=/export/to/guest \
|
|
-device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=/import/from/host,\
|
|
bus=pci.2,addr=0x0 \
|
|
-netdev user,id=hostnet0 \
|
|
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=00:11:22:33:44:55,bus=pci.3,\
|
|
addr=0x0 \
|
|
-netdev user,id=hostnet1 \
|
|
-device e1000e,netdev=hostnet1,id=net1,mac=00:11:22:33:44:66,bus=pci.4,\
|
|
addr=0x0 \
|
|
-device virtio-input-host-pci,id=input0,evdev=/dev/input/event1234,bus=pci.11,\
|
|
addr=0x0 \
|
|
-device virtio-mouse-pci,id=input1,bus=pci.12,addr=0x0 \
|
|
-device virtio-keyboard-pci,id=input2,bus=pci.13,addr=0x0 \
|
|
-device virtio-tablet-pci,id=input3,bus=pci.14,addr=0x0 \
|
|
-device virtio-gpu-pci,id=video0,bus=pcie.0,addr=0x1 \
|
|
-device virtio-balloon-pci,id=balloon0,bus=pci.9,addr=0x0 \
|
|
-object rng-random,id=objrng0,filename=/dev/urandom \
|
|
-device virtio-rng-pci,rng=objrng0,id=rng0,max-bytes=123,period=1234,\
|
|
bus=pci.10,addr=0x0
|