[libvirt PATCH 0/4] qemu: replace -device sga with -M graphics=off

SeaBIOS >= 1.11 / QEMU >= 2.11 no longer requires the 'sga' device for serial console output from the BIOS. It can be done directly with graphics=off machine option. This appears to be live migration compatible, despite changing the number of option ROMS loaded, though I need a little more testing to fully confirm this. Daniel P. Berrangé (4): qemu: prevent use of <bios useserial='yes'> on non-x86 arches qemu: tweak error message to be more general purpose qemu: switch to use -M graphics=off instead of -device sga qemu: stop probing for '-device sga' support src/qemu/qemu_capabilities.c | 3 +-- src/qemu/qemu_capabilities.h | 2 +- src/qemu/qemu_command.c | 25 ++++++++----------- src/qemu/qemu_validate.c | 15 ++++++++--- .../caps_2.11.0.x86_64.xml | 1 - .../caps_2.12.0.x86_64.xml | 1 - .../caps_3.0.0.x86_64.xml | 1 - .../caps_3.1.0.x86_64.xml | 1 - .../caps_4.0.0.x86_64.xml | 1 - .../caps_4.1.0.x86_64.xml | 1 - .../caps_4.2.0.x86_64.xml | 1 - .../caps_5.0.0.x86_64.xml | 1 - .../caps_5.1.0.x86_64.xml | 1 - .../caps_5.2.0.x86_64.xml | 1 - .../caps_6.0.0.x86_64.xml | 1 - .../caps_6.1.0.x86_64.xml | 1 - tests/qemuxml2argvdata/bios.args | 3 +-- tests/qemuxml2argvtest.c | 3 +-- 18 files changed, 25 insertions(+), 38 deletions(-) -- 2.31.1

The <bios useserial='yes'> config results in use of the '-device sga' QEMU options. This in turn causes QEMU go load the sgabios.bin option ROM, which contains x86 machine code. This cannot work on non-x86 arches, thus we should block the bad config. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_validate.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index d8f39b6bdd..3789361b57 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1194,6 +1194,14 @@ qemuValidateDomainDef(const virDomainDef *def, /* Serial graphics adapter */ if (def->os.bios.useserial == VIR_TRISTATE_BOOL_YES) { + /* -device sga is only sane on x86, since the option ROM it + * loads contains x86 machine code. + */ + if (!ARCH_IS_X86(def->os.arch)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("BIOS serial console only supported on x86 architectures")); + return -1; + } if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SGA)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("qemu does not support SGA")); -- 2.31.1

On a Thursday in 2021, Daniel P. Berrangé wrote:
The <bios useserial='yes'> config results in use of the '-device sga' QEMU options. This in turn causes QEMU go load the sgabios.bin option ROM, which contains x86 machine code. This cannot work on non-x86 arches, thus we should block the bad config.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_validate.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index d8f39b6bdd..3789361b57 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1194,6 +1194,14 @@ qemuValidateDomainDef(const virDomainDef *def,
/* Serial graphics adapter */ if (def->os.bios.useserial == VIR_TRISTATE_BOOL_YES) { + /* -device sga is only sane on x86, since the option ROM it + * loads contains x86 machine code. + */
QEMU_CAPS_SGA is only set on x86 QEMUs, so we have already prevented this config in the past. But in context of patch 3/4, adding this check makes sense.
+ if (!ARCH_IS_X86(def->os.arch)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("BIOS serial console only supported on x86 architectures")); + return -1; + } if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SGA)) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("qemu does not support SGA")); -- 2.31.1

The BIOS serial console output is currently implemented using the QEMU 'sga' device, but this is going to change in future patches, so the error message ought to be more generically phrased. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_validate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 3789361b57..47012748e8 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1209,7 +1209,7 @@ qemuValidateDomainDef(const virDomainDef *def, } if (!def->nserials) { virReportError(VIR_ERR_XML_ERROR, "%s", - _("need at least one serial port to use SGA")); + _("need at least one serial port to use BIOS serial output")); return -1; } } -- 2.31.1

SeaBIOS >= 1.11 has built-in support for outputting to the serial console when QEMU sets -M graphics=off. Our minimum QEMU version is 2.11.0, which bundled SeaBIOS 1.11. Thus we have no need to use '-device sga' anymore. This change results in a slight layout difference for option ROMs in memory, however, it does not affect the migration data stream format on the wire and once migration is complete the target QEMU memory layout for ROMs matches the source QEMU once again. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_command.c | 25 ++++++++++--------------- src/qemu/qemu_validate.c | 13 ++++++------- tests/qemuxml2argvdata/bios.args | 3 +-- tests/qemuxml2argvtest.c | 3 +-- 4 files changed, 18 insertions(+), 26 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b230314f7f..4d29313f45 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5956,18 +5956,6 @@ qemuBuildVMGenIDCommandLine(virCommand *cmd, } -static int -qemuBuildSgaCommandLine(virCommand *cmd, - const virDomainDef *def) -{ - /* Serial graphics adapter */ - if (def->os.bios.useserial == VIR_TRISTATE_BOOL_YES) - virCommandAddArgList(cmd, "-device", "sga", NULL); - - return 0; -} - - static char * qemuBuildClockArgStr(virDomainClockDef *def) { @@ -7054,6 +7042,16 @@ qemuBuildMachineCommandLine(virCommand *cmd, virBufferAsprintf(&buf, ",memory-backend=%s", defaultRAMid); } + /* On x86 targets, graphics=off activates the serial console + * output mode in the firmware. On non-x86 targets it has + * various other undesirable effects that we certainly do + * not want to have. We rely on the validation code to have + * blocked useserial=yes on non-x86 + */ + if (def->os.bios.useserial == VIR_TRISTATE_BOOL_YES) { + virBufferAddLit(&buf, ",graphics=off"); + } + virCommandAddArgBuffer(cmd, &buf); return 0; @@ -10553,9 +10551,6 @@ qemuBuildCommandLine(virQEMUDriver *driver, virCommandAddArg(cmd, "-no-user-config"); virCommandAddArg(cmd, "-nodefaults"); - if (qemuBuildSgaCommandLine(cmd, def) < 0) - return NULL; - if (qemuBuildMonitorCommandLine(logManager, secManager, cmd, cfg, def, priv) < 0) return NULL; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 47012748e8..9d93f373ab 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1194,19 +1194,18 @@ qemuValidateDomainDef(const virDomainDef *def, /* Serial graphics adapter */ if (def->os.bios.useserial == VIR_TRISTATE_BOOL_YES) { - /* -device sga is only sane on x86, since the option ROM it - * loads contains x86 machine code. + /* On x86 -machine graphics=off toggles the use of the + * serial console in SeaBIOS (and theoretically other + * firmwares). + * On non-x86, it has also sorts of other effects + * on QEMU device models created and so we don't + * want to allow its use. */ if (!ARCH_IS_X86(def->os.arch)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("BIOS serial console only supported on x86 architectures")); return -1; } - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SGA)) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("qemu does not support SGA")); - return -1; - } if (!def->nserials) { virReportError(VIR_ERR_XML_ERROR, "%s", _("need at least one serial port to use BIOS serial output")); diff --git a/tests/qemuxml2argvdata/bios.args b/tests/qemuxml2argvdata/bios.args index 7356d1626d..7d831a716d 100644 --- a/tests/qemuxml2argvdata/bios.args +++ b/tests/qemuxml2argvdata/bios.args @@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \ /usr/bin/qemu-system-i386 \ -name guest=test-bios,debug-threads=on \ -S \ --machine pc,accel=tcg,usb=off,dump-guest-core=off \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off,graphics=off \ -bios /usr/share/seabios/bios.bin \ -m 1024 \ -realtime mlock=off \ @@ -19,7 +19,6 @@ QEMU_AUDIO_DRV=none \ -display none \ -no-user-config \ -nodefaults \ --device sga \ -chardev socket,id=charmonitor,path=/tmp/lib/domain--1-test-bios/monitor.sock,server=on,wait=off \ -mon chardev=charmonitor,id=monitor,mode=control \ -rtc base=utc \ diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index c67214d01e..4d82267598 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1192,8 +1192,7 @@ mymain(void) DO_TEST_PARSE_ERROR_NOCAPS("reboot-timeout-enabled"); DO_TEST("bios", - QEMU_CAPS_DEVICE_ISA_SERIAL, - QEMU_CAPS_SGA); + QEMU_CAPS_DEVICE_ISA_SERIAL); DO_TEST_NOCAPS("bios-nvram"); DO_TEST("bios-nvram-secure", QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, -- 2.31.1

Since we no longer use '-device sga' we can stop probing for this device in our capabilities code. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_capabilities.c | 3 +-- src/qemu/qemu_capabilities.h | 2 +- tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml | 1 - tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml | 1 - 14 files changed, 2 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 70c3ec2f0c..f27a621f8c 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -151,7 +151,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "virtio-blk-pci.ioeventfd", /* QEMU_CAPS_VIRTIO_IOEVENTFD */ /* 60 */ - "sga", /* QEMU_CAPS_SGA */ + "sga", /* X_QEMU_CAPS_SGA */ "virtio-blk-pci.event_idx", /* QEMU_CAPS_VIRTIO_BLK_EVENT_IDX */ "virtio-net-pci.event_idx", /* QEMU_CAPS_VIRTIO_NET_EVENT_IDX */ "cache-directsync", /* X_QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC */ @@ -1219,7 +1219,6 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "virtio-scsi-device", QEMU_CAPS_VIRTIO_SCSI }, { "megasas", QEMU_CAPS_SCSI_MEGASAS }, { "qxl", QEMU_CAPS_DEVICE_QXL }, - { "sga", QEMU_CAPS_SGA }, { "scsi-block", QEMU_CAPS_SCSI_BLOCK }, { "VGA", QEMU_CAPS_DEVICE_VGA }, { "cirrus-vga", QEMU_CAPS_DEVICE_CIRRUS_VGA }, diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index bc762d1916..f3379f556c 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -130,7 +130,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ QEMU_CAPS_VIRTIO_IOEVENTFD, /* virtio-{net|blk}-pci.ioeventfd=on */ /* 60 */ - QEMU_CAPS_SGA, /* Serial Graphics Adapter */ + X_QEMU_CAPS_SGA, /* Serial Graphics Adapter */ QEMU_CAPS_VIRTIO_BLK_EVENT_IDX, /* virtio-blk-pci.event_idx */ QEMU_CAPS_VIRTIO_NET_EVENT_IDX, /* virtio-net-pci.event_idx */ X_QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC, /* Is cache=directsync supported? */ diff --git a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml index 8a3c9c53c6..631f644144 100644 --- a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml @@ -12,7 +12,6 @@ <flag name='ccid-passthru'/> <flag name='virtio-tx-alg'/> <flag name='virtio-blk-pci.ioeventfd'/> - <flag name='sga'/> <flag name='virtio-blk-pci.event_idx'/> <flag name='virtio-net-pci.event_idx'/> <flag name='piix3-usb-uhci'/> diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml index 3cc5c86e4d..d74dc5ebd5 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml @@ -12,7 +12,6 @@ <flag name='ccid-passthru'/> <flag name='virtio-tx-alg'/> <flag name='virtio-blk-pci.ioeventfd'/> - <flag name='sga'/> <flag name='virtio-blk-pci.event_idx'/> <flag name='virtio-net-pci.event_idx'/> <flag name='piix3-usb-uhci'/> diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml index ff9f88d873..2cc3c11820 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml @@ -12,7 +12,6 @@ <flag name='ccid-passthru'/> <flag name='virtio-tx-alg'/> <flag name='virtio-blk-pci.ioeventfd'/> - <flag name='sga'/> <flag name='virtio-blk-pci.event_idx'/> <flag name='virtio-net-pci.event_idx'/> <flag name='piix3-usb-uhci'/> diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml index a80d381b71..bcc4c44d28 100644 --- a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml @@ -12,7 +12,6 @@ <flag name='ccid-passthru'/> <flag name='virtio-tx-alg'/> <flag name='virtio-blk-pci.ioeventfd'/> - <flag name='sga'/> <flag name='virtio-blk-pci.event_idx'/> <flag name='virtio-net-pci.event_idx'/> <flag name='piix3-usb-uhci'/> diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml index 19b8a49394..e999d7574c 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml @@ -12,7 +12,6 @@ <flag name='ccid-passthru'/> <flag name='virtio-tx-alg'/> <flag name='virtio-blk-pci.ioeventfd'/> - <flag name='sga'/> <flag name='virtio-blk-pci.event_idx'/> <flag name='virtio-net-pci.event_idx'/> <flag name='piix3-usb-uhci'/> diff --git a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml index 841b753518..80c3e3cbed 100644 --- a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml @@ -12,7 +12,6 @@ <flag name='ccid-passthru'/> <flag name='virtio-tx-alg'/> <flag name='virtio-blk-pci.ioeventfd'/> - <flag name='sga'/> <flag name='virtio-blk-pci.event_idx'/> <flag name='virtio-net-pci.event_idx'/> <flag name='piix3-usb-uhci'/> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml index 6e3aa7f5d9..99f9375c04 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml @@ -12,7 +12,6 @@ <flag name='ccid-passthru'/> <flag name='virtio-tx-alg'/> <flag name='virtio-blk-pci.ioeventfd'/> - <flag name='sga'/> <flag name='virtio-blk-pci.event_idx'/> <flag name='virtio-net-pci.event_idx'/> <flag name='piix3-usb-uhci'/> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml index 0c28645f69..03fc7d4106 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml @@ -12,7 +12,6 @@ <flag name='ccid-passthru'/> <flag name='virtio-tx-alg'/> <flag name='virtio-blk-pci.ioeventfd'/> - <flag name='sga'/> <flag name='virtio-blk-pci.event_idx'/> <flag name='virtio-net-pci.event_idx'/> <flag name='piix3-usb-uhci'/> diff --git a/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml index fd77d9bbc9..fc0b502ef9 100644 --- a/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml @@ -12,7 +12,6 @@ <flag name='ccid-passthru'/> <flag name='virtio-tx-alg'/> <flag name='virtio-blk-pci.ioeventfd'/> - <flag name='sga'/> <flag name='virtio-blk-pci.event_idx'/> <flag name='virtio-net-pci.event_idx'/> <flag name='piix3-usb-uhci'/> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml index 234ac8f7ef..cb1226fc04 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml @@ -12,7 +12,6 @@ <flag name='ccid-passthru'/> <flag name='virtio-tx-alg'/> <flag name='virtio-blk-pci.ioeventfd'/> - <flag name='sga'/> <flag name='virtio-blk-pci.event_idx'/> <flag name='virtio-net-pci.event_idx'/> <flag name='piix3-usb-uhci'/> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml index 4951644354..d03b8aa726 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml @@ -12,7 +12,6 @@ <flag name='ccid-passthru'/> <flag name='virtio-tx-alg'/> <flag name='virtio-blk-pci.ioeventfd'/> - <flag name='sga'/> <flag name='virtio-blk-pci.event_idx'/> <flag name='virtio-net-pci.event_idx'/> <flag name='piix3-usb-uhci'/> diff --git a/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml index eca9facf80..8239f4266a 100644 --- a/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.1.0.x86_64.xml @@ -12,7 +12,6 @@ <flag name='ccid-passthru'/> <flag name='virtio-tx-alg'/> <flag name='virtio-blk-pci.ioeventfd'/> - <flag name='sga'/> <flag name='virtio-blk-pci.event_idx'/> <flag name='virtio-net-pci.event_idx'/> <flag name='piix3-usb-uhci'/> -- 2.31.1

On a Thursday in 2021, Daniel P. Berrangé wrote:
SeaBIOS >= 1.11 / QEMU >= 2.11 no longer requires the 'sga' device for serial console output from the BIOS. It can be done directly with graphics=off machine option.
This appears to be live migration compatible, despite changing the number of option ROMS loaded, though I need a little more testing to fully confirm this.
Daniel P. Berrangé (4): qemu: prevent use of <bios useserial='yes'> on non-x86 arches qemu: tweak error message to be more general purpose qemu: switch to use -M graphics=off instead of -device sga qemu: stop probing for '-device sga' support
src/qemu/qemu_capabilities.c | 3 +-- src/qemu/qemu_capabilities.h | 2 +- src/qemu/qemu_command.c | 25 ++++++++----------- src/qemu/qemu_validate.c | 15 ++++++++--- .../caps_2.11.0.x86_64.xml | 1 - .../caps_2.12.0.x86_64.xml | 1 - .../caps_3.0.0.x86_64.xml | 1 - .../caps_3.1.0.x86_64.xml | 1 - .../caps_4.0.0.x86_64.xml | 1 - .../caps_4.1.0.x86_64.xml | 1 - .../caps_4.2.0.x86_64.xml | 1 - .../caps_5.0.0.x86_64.xml | 1 - .../caps_5.1.0.x86_64.xml | 1 - .../caps_5.2.0.x86_64.xml | 1 - .../caps_6.0.0.x86_64.xml | 1 - .../caps_6.1.0.x86_64.xml | 1 - tests/qemuxml2argvdata/bios.args | 3 +-- tests/qemuxml2argvtest.c | 3 +-- 18 files changed, 25 insertions(+), 38 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

On Thu, Sep 09, 2021 at 12:25:12PM +0100, Daniel P. Berrangé wrote:
SeaBIOS >= 1.11 / QEMU >= 2.11 no longer requires the 'sga' device for serial console output from the BIOS. It can be done directly with graphics=off machine option.
This appears to be live migration compatible, despite changing the number of option ROMS loaded, though I need a little more testing to fully confirm this.
Daniel P. Berrangé (4): qemu: prevent use of <bios useserial='yes'> on non-x86 arches qemu: tweak error message to be more general purpose qemu: switch to use -M graphics=off instead of -device sga qemu: stop probing for '-device sga' support
src/qemu/qemu_capabilities.c | 3 +-- src/qemu/qemu_capabilities.h | 2 +- src/qemu/qemu_command.c | 25 ++++++++----------- src/qemu/qemu_validate.c | 15 ++++++++--- .../caps_2.11.0.x86_64.xml | 1 - .../caps_2.12.0.x86_64.xml | 1 - .../caps_3.0.0.x86_64.xml | 1 - .../caps_3.1.0.x86_64.xml | 1 - .../caps_4.0.0.x86_64.xml | 1 - .../caps_4.1.0.x86_64.xml | 1 - .../caps_4.2.0.x86_64.xml | 1 - .../caps_5.0.0.x86_64.xml | 1 - .../caps_5.1.0.x86_64.xml | 1 - .../caps_5.2.0.x86_64.xml | 1 - .../caps_6.0.0.x86_64.xml | 1 - .../caps_6.1.0.x86_64.xml | 1 - tests/qemuxml2argvdata/bios.args | 3 +-- tests/qemuxml2argvtest.c | 3 +-- 18 files changed, 25 insertions(+), 38 deletions(-)
I didn't test it, but the changes look reasonable so: Reviewed-by: Richard W.M. Jones <rjones@redhat.com> Equivalent (non-)change to libguestfs is: https://github.com/libguestfs/libguestfs/commit/e14ff937422115e23094ca4cce80... Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-top is 'top' for virtual machines. Tiny program with many powerful monitoring features, net stats, disk stats, logging, etc. http://people.redhat.com/~rjones/virt-top
participants (3)
-
Daniel P. Berrangé
-
Ján Tomko
-
Richard W.M. Jones