From 789fe8e8188521d55044d37c055d5d2cabbd5cfd Mon Sep 17 00:00:00 2001 From: Aaron Lauterer Date: Mon, 27 Jul 2020 15:55:25 +0200 Subject: [PATCH] cfg2cmd: vga: fix #2749: disable edid for Win+BIOS+VGA machines Edid support was added with Qemu 5. Windows guests seem to not be able to get all possible resolutions if the default std VGA device is used as GPU and the VM boots in BIOS mode. The result is that only one of the following three resolutions can be configured: 800x600 1024x768 1920x1080 It is important to note that just booting a Windows VM with the edid=off parameter will not make the large list of resolutions available. It seems that Windows is caching the list of possible resolutions somewhere [0]. Uninstalling the 'Microsoft Basic Display Adapter' in the device manager and rebooting the VM is one way I found to force Windows to recreate the list of possible resolutions. Signed-off-by: Aaron Lauterer [0] https://lists.nongnu.org/archive/html/qemu-devel/2020-07/msg07128.html --- PVE/QemuServer.pm | 7 ++++++- test/cfg2cmd/custom-cpu-model-host-phys-bits.conf.cmd | 2 +- test/cfg2cmd/custom-cpu-model.conf.cmd | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index a9c0dac0..d41f1621 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -1648,6 +1648,11 @@ sub print_vga_device { $memory = ",ram_size=67108864,vram_size=33554432"; } + my $edidoff = ""; + if ($type eq 'VGA' && windows_version($conf->{ostype})) { + $edidoff=",edid=off" if $conf->{bios} ne 'ovmf'; + } + my $q35 = PVE::QemuServer::Machine::machine_type_is_q35($conf); my $vgaid = "vga" . ($id // ''); my $pciaddr; @@ -1659,7 +1664,7 @@ sub print_vga_device { $pciaddr = print_pci_addr($vgaid, $bridges, $arch, $machine); } - return "$type,id=${vgaid}${memory}${max_outputs}${pciaddr}"; + return "$type,id=${vgaid}${memory}${max_outputs}${pciaddr}${edidoff}"; } sub parse_number_sets { diff --git a/test/cfg2cmd/custom-cpu-model-host-phys-bits.conf.cmd b/test/cfg2cmd/custom-cpu-model-host-phys-bits.conf.cmd index d8fa2544..fb6e8c8f 100644 --- a/test/cfg2cmd/custom-cpu-model-host-phys-bits.conf.cmd +++ b/test/cfg2cmd/custom-cpu-model-host-phys-bits.conf.cmd @@ -19,7 +19,7 @@ -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \ -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \ -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' \ - -device 'VGA,id=vga,bus=pci.0,addr=0x2' \ + -device 'VGA,id=vga,bus=pci.0,addr=0x2,edid=off' \ -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' \ diff --git a/test/cfg2cmd/custom-cpu-model.conf.cmd b/test/cfg2cmd/custom-cpu-model.conf.cmd index 193140f1..b30163c4 100644 --- a/test/cfg2cmd/custom-cpu-model.conf.cmd +++ b/test/cfg2cmd/custom-cpu-model.conf.cmd @@ -19,7 +19,7 @@ -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \ -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \ -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' \ - -device 'VGA,id=vga,bus=pci.0,addr=0x2' \ + -device 'VGA,id=vga,bus=pci.0,addr=0x2,edid=off' \ -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' \