mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-05-03 03:38:29 +00:00
enable q35 machine support
q35 use pcie.0 root by default. so currently we can't start machine model q35. we need to add 3 pci-bridge pci.0, pci.1, pci.2, to handle our devices. pcie.0 does not support hotplug. so pci-bridge are defined at startup. I use an pve-q35.cfg (mostly the same than q35-chipset.cfg from qemu docs). Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
This commit is contained in:
parent
6d33c863b4
commit
f8e83f0548
1
Makefile
1
Makefile
@ -75,6 +75,7 @@ install: ${PKGSOURCES}
|
|||||||
install -d ${DESTDIR}/usr/share/man/man5
|
install -d ${DESTDIR}/usr/share/man/man5
|
||||||
install -d ${DESTDIR}/usr/share/${PACKAGE}
|
install -d ${DESTDIR}/usr/share/${PACKAGE}
|
||||||
install -m 0644 pve-usb.cfg ${DESTDIR}/usr/share/${PACKAGE}
|
install -m 0644 pve-usb.cfg ${DESTDIR}/usr/share/${PACKAGE}
|
||||||
|
install -m 0644 pve-q35.cfg ${DESTDIR}/usr/share/${PACKAGE}
|
||||||
make -C PVE install
|
make -C PVE install
|
||||||
install -m 0755 qm ${DESTDIR}${SBINDIR}
|
install -m 0755 qm ${DESTDIR}${SBINDIR}
|
||||||
install -m 0755 qmrestore ${DESTDIR}${SBINDIR}
|
install -m 0755 qmrestore ${DESTDIR}${SBINDIR}
|
||||||
|
@ -2331,6 +2331,7 @@ sub config_to_command {
|
|||||||
|
|
||||||
my $have_ovz = -f '/proc/vz/vestat';
|
my $have_ovz = -f '/proc/vz/vestat';
|
||||||
|
|
||||||
|
my $q35 = 1 if($conf->{machine} && $conf->{machine} =~ m/q35/);
|
||||||
push @$cmd, '/usr/bin/kvm';
|
push @$cmd, '/usr/bin/kvm';
|
||||||
|
|
||||||
push @$cmd, '-id', $vmid;
|
push @$cmd, '-id', $vmid;
|
||||||
@ -2348,6 +2349,9 @@ sub config_to_command {
|
|||||||
|
|
||||||
push @$cmd, '-daemonize';
|
push @$cmd, '-daemonize';
|
||||||
|
|
||||||
|
if($q35){
|
||||||
|
push @$devices, '-readconfig', '/usr/share/qemu-server/pve-q35.cfg';
|
||||||
|
}else{
|
||||||
$pciaddr = print_pci_addr("piix3", $bridges);
|
$pciaddr = print_pci_addr("piix3", $bridges);
|
||||||
push @$devices, '-device', "piix3-usb-uhci,id=uhci$pciaddr.0x2";
|
push @$devices, '-device', "piix3-usb-uhci,id=uhci$pciaddr.0x2";
|
||||||
|
|
||||||
@ -2358,6 +2362,7 @@ sub config_to_command {
|
|||||||
}
|
}
|
||||||
# include usb device config
|
# include usb device config
|
||||||
push @$devices, '-readconfig', '/usr/share/qemu-server/pve-usb.cfg' if $use_usb2;
|
push @$devices, '-readconfig', '/usr/share/qemu-server/pve-usb.cfg' if $use_usb2;
|
||||||
|
}
|
||||||
|
|
||||||
my $vga = $conf->{vga};
|
my $vga = $conf->{vga};
|
||||||
|
|
||||||
@ -2384,7 +2389,8 @@ sub config_to_command {
|
|||||||
$tablet = 0 if $vga =~ m/^serial\d+$/; # disable if we use serial terminal (no vga card)
|
$tablet = 0 if $vga =~ m/^serial\d+$/; # disable if we use serial terminal (no vga card)
|
||||||
}
|
}
|
||||||
|
|
||||||
push @$devices, '-device', 'usb-tablet,id=tablet,bus=uhci.0,port=1' if $tablet;
|
my $usbbus = $q35 ? "ehci" : "uhci";
|
||||||
|
push @$devices, '-device', "usb-tablet,id=tablet,bus=$usbbus.0,port=1" if $tablet;
|
||||||
|
|
||||||
# host pci devices
|
# host pci devices
|
||||||
for (my $i = 0; $i < $MAX_HOSTPCI_DEVICES; $i++) {
|
for (my $i = 0; $i < $MAX_HOSTPCI_DEVICES; $i++) {
|
||||||
@ -2671,12 +2677,13 @@ sub config_to_command {
|
|||||||
push @$devices, '-device', $netdevicefull;
|
push @$devices, '-device', $netdevicefull;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!$q35){
|
||||||
#bridges
|
#bridges
|
||||||
while (my ($k, $v) = each %$bridges) {
|
while (my ($k, $v) = each %$bridges) {
|
||||||
$pciaddr = print_pci_addr("pci.$k");
|
$pciaddr = print_pci_addr("pci.$k");
|
||||||
unshift @$devices, '-device', "pci-bridge,id=pci.$k,chassis_nr=$k$pciaddr" if $k > 0;
|
unshift @$devices, '-device', "pci-bridge,id=pci.$k,chassis_nr=$k$pciaddr" if $k > 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# hack: virtio with fairsched is unreliable, so we do not use fairsched
|
# hack: virtio with fairsched is unreliable, so we do not use fairsched
|
||||||
# when the VM uses virtio devices.
|
# when the VM uses virtio devices.
|
||||||
@ -2756,9 +2763,10 @@ sub vm_deviceplug {
|
|||||||
my ($storecfg, $conf, $vmid, $deviceid, $device) = @_;
|
my ($storecfg, $conf, $vmid, $deviceid, $device) = @_;
|
||||||
|
|
||||||
return 1 if !check_running($vmid);
|
return 1 if !check_running($vmid);
|
||||||
|
my $q35 = 1 if ($conf->{machine} && $conf->{machine} =~ m/q35/);
|
||||||
if ($deviceid eq 'tablet') {
|
if ($deviceid eq 'tablet') {
|
||||||
my $devicefull = "usb-tablet,id=tablet,bus=uhci.0,port=1";
|
my $usbbus = $q35 ? "ehci" : "uhci";
|
||||||
|
my $devicefull = "usb-tablet,id=tablet,bus=$usbbus.0,port=1";
|
||||||
qemu_deviceadd($vmid, $devicefull);
|
qemu_deviceadd($vmid, $devicefull);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -2809,7 +2817,8 @@ sub vm_deviceplug {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($deviceid =~ m/^(pci\.)(\d+)$/) {
|
|
||||||
|
if (!$q35 && $deviceid =~ m/^(pci\.)(\d+)$/) {
|
||||||
my $bridgeid = $2;
|
my $bridgeid = $2;
|
||||||
my $pciaddr = print_pci_addr($deviceid);
|
my $pciaddr = print_pci_addr($deviceid);
|
||||||
my $devicefull = "pci-bridge,id=pci.$bridgeid,chassis_nr=$bridgeid$pciaddr";
|
my $devicefull = "pci-bridge,id=pci.$bridgeid,chassis_nr=$bridgeid$pciaddr";
|
||||||
|
147
pve-q35.cfg
Normal file
147
pve-q35.cfg
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
[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 = "ioh3420"
|
||||||
|
multifunction = "on"
|
||||||
|
bus = "pcie.0"
|
||||||
|
addr = "1c.0"
|
||||||
|
port = "1"
|
||||||
|
chassis = "1"
|
||||||
|
|
||||||
|
[device "ich9-pcie-port-2"]
|
||||||
|
driver = "ioh3420"
|
||||||
|
multifunction = "on"
|
||||||
|
bus = "pcie.0"
|
||||||
|
addr = "1c.1"
|
||||||
|
port = "2"
|
||||||
|
chassis = "2"
|
||||||
|
|
||||||
|
[device "ich9-pcie-port-3"]
|
||||||
|
driver = "ioh3420"
|
||||||
|
multifunction = "on"
|
||||||
|
bus = "pcie.0"
|
||||||
|
addr = "1c.2"
|
||||||
|
port = "3"
|
||||||
|
chassis = "3"
|
||||||
|
|
||||||
|
[device "ich9-pcie-port-4"]
|
||||||
|
driver = "ioh3420"
|
||||||
|
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"
|
Loading…
Reference in New Issue
Block a user