From 739ba34024cf33bf6c9ae0077d44ffc6d5e12cf4 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Mon, 17 Dec 2018 13:57:08 +0100 Subject: [PATCH] add win7 pcie quirk Win7 is very picky about pcie assignments and fails with 'error 12' the way we add hospci devices. To combat that, we simply give the hostpci device a normal port instead. Start with address 0x10, so that we have space before those devices, and between them and the ones configured in pve-q35.cfg should we need it in the future. Signed-off-by: Dominik Csapak --- PVE/QemuServer.pm | 8 +++++++- PVE/QemuServer/PCI.pm | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 38b511e9..8b09bcdc 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -3524,7 +3524,13 @@ sub config_to_command { my $pcie = $d->{pcie}; if($pcie){ die "q35 machine model is not enabled" if !$q35; - $pciaddr = print_pcie_addr("hostpci$i"); + # win7 wants to have the pcie devices directly on the pcie bus + # instead of in the root port + if ($winversion == 7) { + $pciaddr = print_pcie_addr("hostpci${i}bus0"); + } else { + $pciaddr = print_pcie_addr("hostpci$i"); + } }else{ $pciaddr = print_pci_addr("hostpci$i", $bridges, $arch, $machine_type); } diff --git a/PVE/QemuServer/PCI.pm b/PVE/QemuServer/PCI.pm index 29b89431..f22f5adb 100644 --- a/PVE/QemuServer/PCI.pm +++ b/PVE/QemuServer/PCI.pm @@ -145,6 +145,11 @@ sub print_pcie_addr { hostpci1 => { bus => "ich9-pcie-port-2", addr => 0 }, hostpci2 => { bus => "ich9-pcie-port-3", addr => 0 }, hostpci3 => { bus => "ich9-pcie-port-4", addr => 0 }, + # win7 is picky about pcie assignments + hostpci0bus0 => { bus => "pcie.0", addr => 16 }, + hostpci1bus0 => { bus => "pcie.0", addr => 17 }, + hostpci2bus0 => { bus => "pcie.0", addr => 18 }, + hostpci3bus0 => { bus => "pcie.0", addr => 19 }, }; if (defined($devices->{$id}->{bus}) && defined($devices->{$id}->{addr})) {