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 <d.csapak@proxmox.com>
This commit is contained in:
Dominik Csapak 2018-12-17 13:57:08 +01:00 committed by Thomas Lamprecht
parent 86c9fafefc
commit 739ba34024
2 changed files with 12 additions and 1 deletions

View File

@ -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);
}

View File

@ -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})) {