From 3fd272db468c84a28d967b5d94b4d1479296f6b3 Mon Sep 17 00:00:00 2001 Message-Id: <3fd272db468c84a28d967b5d94b4d1479296f6b3@dist-git> From: Jiri Denemark Date: Tue, 28 Jun 2016 22:15:25 +0200 Subject: [PATCH] qemu: Use bootindex whenever possible I'm not sure why our code claimed "-boot menu=on" cannot be used in combination with per-device bootindex, but it was proved wrong about four years ago by commit 8c952908. Let's always use bootindex when QEMU supports it. https://bugzilla.redhat.com/show_bug.cgi?id=1323085 Signed-off-by: Jiri Denemark (cherry picked from commit 0dd67acfa752123a297469ff873f47cefce95435) Signed-off-by: Jiri Denemark --- src/qemu/qemu_command.c | 18 ++++++-------- .../qemuxml2argv-boot-menu-enable-bootindex.args | 23 ++++++++++++++++++ .../qemuxml2argv-boot-menu-enable-bootindex.xml | 28 ++++++++++++++++++++++ tests/qemuxml2argvtest.c | 2 +- 4 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.xml diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 5b2f041..49412c0 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6028,22 +6028,18 @@ qemuBuildBootCommandLine(virCommandPtr cmd, /* * We prefer using explicit bootindex=N parameters for predictable * results even though domain XML doesn't use per device boot elements. - * However, we can't use bootindex if boot menu was requested. */ - if (!def->os.nBootDevs) { - /* def->os.nBootDevs is guaranteed to be > 0 unless per-device boot - * configuration is used - */ - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX)) { + *emitBootindex = true; + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX)) { + if (def->os.nBootDevs == 0) { + /* def->os.nBootDevs is guaranteed to be > 0 unless per-device boot + * configuration is used + */ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("hypervisor lacks deviceboot feature")); goto error; } - *emitBootindex = true; - } else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX) && - (def->os.bootmenu != VIR_TRISTATE_BOOL_YES || - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOT_MENU))) { - *emitBootindex = true; + *emitBootindex = false; } if (!*emitBootindex) { diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.args new file mode 100644 index 0000000..6580b82 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.args @@ -0,0 +1,23 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/home/test \ +USER=test \ +LOGNAME=test \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu \ +-name QEMUGuest1 \ +-S \ +-M pc \ +-m 214 \ +-smp 1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-nographic \ +-nodefaults \ +-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \ +-no-acpi \ +-boot menu=on \ +-usb \ +-drive file=/dev/cdrom,format=raw,if=none,media=cdrom,id=drive-ide0-1-0,\ +readonly=on \ +-device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0,bootindex=1 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.xml b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.xml new file mode 100644 index 0000000..831933e --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-menu-enable-bootindex.xml @@ -0,0 +1,28 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 + 219100 + 1 + + hvm + + + + + destroy + restart + destroy + + /usr/bin/qemu + + + + +
+ + + + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index a4b8bf4..a73db5e 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -622,7 +622,7 @@ mymain(void) DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU); DO_TEST("boot-menu-enable", QEMU_CAPS_BOOT_MENU); - DO_TEST("boot-menu-enable", + DO_TEST("boot-menu-enable-bootindex", QEMU_CAPS_BOOT_MENU, QEMU_CAPS_BOOTINDEX); DO_TEST("boot-menu-enable-with-timeout", -- 2.9.0