$conf->{vmgenid} = PVE::QemuServer::generate_uuid();
}
+ my $machine = $conf->{machine};
+ if (!$machine || $machine =~ m/^(?:pc|q35|virt)$/) {
+ # always pin Windows' machine version on create, they get to easily confused
+ if (PVE::QemuServer::windows_version($conf->{ostype})) {
+ my $pin_version = PVE::QemuServer::kvm_user_version();
+ if (!$machine || $machine eq 'pc') {
+ $machine = "pc-i440fx-$pin_version";
+ } elsif ($machine eq 'q35') {
+ $machine = "pc-q35-$pin_version";
+ }
+ $conf->{machine} = $machine;
+ }
+ }
+
PVE::QemuConfig->write_config($vmid, $conf);
};
my $machine = $forcemachine || $conf->{machine};
if (!$machine || $machine =~ m/^(?:pc|q35|virt)$/) {
+ $kvmversion //= kvm_user_version();
+ # we must pin Windows VMs without a specific version to 5.1, as 5.2 fixed a bug in ACPI
+ # layout which confuses windows quite a bit and may result in various regressions..
+ # see: https://lists.gnu.org/archive/html/qemu-devel/2021-02/msg08484.html
+ if (windows_version($conf->{ostype})) {
+ my $pin_version = '5.1';
+ if (!PVE::QemuServer::Machine::can_run_pve_machine_version($pin_version, $kvmversion)) {
+ $kvmversion =~ m/^(\d+\.\d+)/;
+ $pin_version = $1;
+ }
+ if (!$machine || $machine eq 'pc') {
+ $machine = "pc-i440fx-$pin_version";
+ } elsif ($machine eq 'q35') {
+ $machine = "pc-q35-$pin_version";
+ }
+ }
$arch //= 'x86_64';
$machine ||= $default_machines->{$arch};
if ($add_pve_version) {
- $kvmversion //= kvm_user_version();
my $pvever = PVE::QemuServer::Machine::get_pve_version($kvmversion);
$machine .= "+pve$pvever";
}
-device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \
-iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-rtc 'driftfix=slew,base=localtime' \
- -machine 'type=pc+pve0' \
+ -machine 'type=pc-i440fx-5.1+pve0' \
-global 'kvm-pit.lost_tick_policy=discard'
-device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \
-iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
-rtc 'driftfix=slew,base=localtime' \
- -machine 'type=pc+pve0' \
+ -machine 'type=pc-i440fx-5.1+pve0' \
-global 'kvm-pit.lost_tick_policy=discard'
-netdev 'type=tap,id=net0,ifname=tap8006i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \
-device 'virtio-net-pci,mac=2E:01:68:F9:9C:87,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300' \
-rtc 'driftfix=slew,base=localtime' \
- -machine 'type=pc+pve0' \
+ -machine 'type=pc-i440fx-5.1+pve0' \
-global 'kvm-pit.lost_tick_policy=discard'
-netdev 'type=tap,id=net0,ifname=tap8006i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \
-device 'virtio-net-pci,mac=2E:01:68:F9:9C:87,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300' \
-rtc 'driftfix=slew,base=localtime' \
- -machine 'type=q35+pve0' \
+ -machine 'type=pc-q35-5.1+pve0' \
-global 'kvm-pit.lost_tick_policy=discard'
-netdev 'type=tap,id=net0,ifname=tap8006i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \
-device 'virtio-net-pci,mac=A2:C0:43:77:08:A1,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300' \
-rtc 'driftfix=slew,base=localtime' \
- -machine 'type=pc' \
+ -machine 'type=pc-i440fx-4.0' \
-global 'kvm-pit.lost_tick_policy=discard'