On 7/8/19 11:25 AM, Dominik Csapak wrote: > with qemu 4.0 we can make use of the new pcie-root-ports with settings > for the width/speed which can resolve issues with some hardware combinations > when negioating link speed > > so we add a new q35 cfg that we include with machine types >= 4.0 > to preserve live migration of machines without passthrough but q35 > > for details about the link speeds see: > > pcie: Enhanced link speed and width support > https://lists.gnu.org/archive/html/qemu-devel/2018-12/msg02827.html > > Signed-off-by: Dominik Csapak <d.csa...@proxmox.com> > --- > i would like to get this into 6.0 before release, else we either cannot do > this > until qemu 4.0.1/4.1 or have some situations where live migration is not > possible > > an alternative would be to only do this change when we do pci(e) passthrough > which would minimize the impact on live migration, but makes the code a bit > more complicated >
applied, but I only skimmed the new config so I'd be great to get another cross-check of it soon... > Makefile | 1 + > PVE/QemuServer.pm | 9 +++ > PVE/QemuServer/USB.pm | 6 +- > pve-q35-4.0.cfg | 161 ++++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 172 insertions(+), 5 deletions(-) > create mode 100644 pve-q35-4.0.cfg > > diff --git a/Makefile b/Makefile > index 8274060..6e8fc78 100644 > --- a/Makefile > +++ b/Makefile > @@ -77,6 +77,7 @@ install: ${PKGSOURCES} > install -d ${DESTDIR}/usr/share/${PACKAGE} > install -m 0644 pve-usb.cfg ${DESTDIR}/usr/share/${PACKAGE} > install -m 0644 pve-q35.cfg ${DESTDIR}/usr/share/${PACKAGE} > + install -m 0644 pve-q35-4.0.cfg ${DESTDIR}/usr/share/${PACKAGE} > install -m 0644 -D qm.bash-completion ${DESTDIR}/${BASHCOMPLDIR}/qm > install -m 0644 -D qmrestore.bash-completion > ${DESTDIR}/${BASHCOMPLDIR}/qmrestore > install -m 0644 -D qm.zsh-completion ${DESTDIR}/${ZSHCOMPLDIR}/_qm > diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm > index 5ef92a3..9f29927 100644 > --- a/PVE/QemuServer.pm > +++ b/PVE/QemuServer.pm > @@ -3628,6 +3628,15 @@ sub config_to_command { > push @$cmd, '-drive', > "if=pflash,unit=1,format=$format,id=drive-efidisk0,file=$path"; > } > > + # load q35 config > + if ($q35) { > + # we use different pcie-port hardware for qemu >= 4.0 for passthrough > + if (qemu_machine_feature_enabled($machine_type, $kvmver, 4, 0)) { > + push @$devices, '-readconfig', > '/usr/share/qemu-server/pve-q35-4.0.cfg'; > + } else { > + push @$devices, '-readconfig', '/usr/share/qemu-server/pve-q35.cfg'; > + } > + } > > # add usb controllers > my @usbcontrollers = PVE::QemuServer::USB::get_usb_controllers($conf, > $bridges, $arch, $machine_type, $usbdesc->{format}, $MAX_USB_DEVICES); > diff --git a/PVE/QemuServer/USB.pm b/PVE/QemuServer/USB.pm > index 9eaaccc..a2097b9 100644 > --- a/PVE/QemuServer/USB.pm > +++ b/PVE/QemuServer/USB.pm > @@ -42,11 +42,7 @@ sub get_usb_controllers { > if ($arch eq 'aarch64') { > $pciaddr = print_pci_addr('ehci', $bridges, $arch, $machine); > push @$devices, '-device', "usb-ehci,id=ehci$pciaddr"; > - } elsif ($machine =~ /q35/) { # FIXME: combine this and > machine_type_is_q35 > - # the q35 chipset support native usb2, so we enable usb controller > - # by default for this machine type > - push @$devices, '-readconfig', '/usr/share/qemu-server/pve-q35.cfg'; > - } else { > + } elsif ($machine !~ /q35/) { # FIXME: combine this and > machine_type_is_q35 > $pciaddr = print_pci_addr("piix3", $bridges, $arch, $machine); > push @$devices, '-device', "piix3-usb-uhci,id=uhci$pciaddr.0x2"; > > diff --git a/pve-q35-4.0.cfg b/pve-q35-4.0.cfg > new file mode 100644 > index 0000000..9a294bd > --- /dev/null > +++ b/pve-q35-4.0.cfg > @@ -0,0 +1,161 @@ > +[device "ehci"] > + driver = "ich9-usb-ehci1" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1d.7" > + > +[device "uhci-1"] > + driver = "ich9-usb-uhci1" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1d.0" > + masterbus = "ehci.0" > + firstport = "0" > + > +[device "uhci-2"] > + driver = "ich9-usb-uhci2" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1d.1" > + masterbus = "ehci.0" > + firstport = "2" > + > +[device "uhci-3"] > + driver = "ich9-usb-uhci3" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1d.2" > + masterbus = "ehci.0" > + firstport = "4" > + > +[device "ehci-2"] > + driver = "ich9-usb-ehci2" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1a.7" > + > +[device "uhci-4"] > + driver = "ich9-usb-uhci4" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1a.0" > + masterbus = "ehci-2.0" > + firstport = "0" > + > +[device "uhci-5"] > + driver = "ich9-usb-uhci5" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1a.1" > + masterbus = "ehci-2.0" > + firstport = "2" > + > +[device "uhci-6"] > + driver = "ich9-usb-uhci6" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1a.2" > + masterbus = "ehci-2.0" > + firstport = "4" > + > + > +[device "audio0"] > + driver = "ich9-intel-hda" > + bus = "pcie.0" > + addr = "1b.0" > + > + > +[device "ich9-pcie-port-1"] > + driver = "pcie-root-port" > + x-speed = "16" > + x-width = "32" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1c.0" > + port = "1" > + chassis = "1" > + > +[device "ich9-pcie-port-2"] > + driver = "pcie-root-port" > + x-speed = "16" > + x-width = "32" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1c.1" > + port = "2" > + chassis = "2" > + > +[device "ich9-pcie-port-3"] > + driver = "pcie-root-port" > + x-speed = "16" > + x-width = "32" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1c.2" > + port = "3" > + chassis = "3" > + > +[device "ich9-pcie-port-4"] > + driver = "pcie-root-port" > + x-speed = "16" > + x-width = "32" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1c.3" > + port = "4" > + chassis = "4" > + > +## > +# Example PCIe switch with two downstream ports > +# > +#[device "pcie-switch-upstream-port-1"] > +# driver = "x3130-upstream" > +# bus = "ich9-pcie-port-4" > +# addr = "00.0" > +# > +#[device "pcie-switch-downstream-port-1-1"] > +# driver = "xio3130-downstream" > +# multifunction = "on" > +# bus = "pcie-switch-upstream-port-1" > +# addr = "00.0" > +# port = "1" > +# chassis = "5" > +# > +#[device "pcie-switch-downstream-port-1-2"] > +# driver = "xio3130-downstream" > +# multifunction = "on" > +# bus = "pcie-switch-upstream-port-1" > +# addr = "00.1" > +# port = "1" > +# chassis = "6" > + > + > + > +[device "pcidmi"] > + driver = "i82801b11-bridge" > + bus = "pcie.0" > + addr = "1e.0" > + > +[device "pci.0"] > + driver = "pci-bridge" > + bus = "pcidmi" > + addr = "1.0" > + chassis_nr = "1" > + > +[device "pci.1"] > + driver = "pci-bridge" > + bus = "pcidmi" > + addr = "2.0" > + chassis_nr = "2" > + > +[device "pci.2"] > + driver = "pci-bridge" > + bus = "pcidmi" > + addr = "3.0" > + chassis_nr = "3" > + > +[device "pci.3"] > + driver = "pci-bridge" > + bus = "pcidmi" > + addr = "4.0" > + chassis_nr = "4" > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel