bootable flag is a property of the frontend thus should be formatted with -device. Note: The combination of capability flags basically mandates qemu 0.12.3 - 1.0.0, which I did not test. --- src/qemu/qemu_command.c | 21 +++++++++++---------- .../qemuxml2argvdata/qemuxml2argv-boot-complex.args | 4 ++-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 89bc41e468..08d96ef562 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1687,6 +1687,7 @@ qemuBuildDiskFrontendAttributeErrorPolicy(virDomainDiskDefPtr disk, static void qemuBuildDiskFrontendAttributes(virDomainDiskDefPtr disk, virQEMUCapsPtr qemuCaps, + int bootindex, virBufferPtr buf) { /* generate geometry command string */ @@ -1709,6 +1710,14 @@ qemuBuildDiskFrontendAttributes(virDomainDiskDefPtr disk, virBufferEscape(buf, '\\', " ", "%s", disk->serial); } + if (bootindex && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX) && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_BOOT) && + (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK || + disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) && + disk->bus != VIR_DOMAIN_DISK_BUS_IDE) + virBufferAddLit(buf, ",boot=on"); + qemuBuildDiskFrontendAttributeErrorPolicy(disk, qemuCaps, buf); } @@ -1749,7 +1758,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, virBufferAsprintf(&opt, "if=%s", virDomainDiskQEMUBusTypeToString(disk->bus)); virBufferAsprintf(&opt, ",index=%d", idx); - qemuBuildDiskFrontendAttributes(disk, qemuCaps, &opt); + qemuBuildDiskFrontendAttributes(disk, qemuCaps, bootindex, &opt); } if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) { @@ -1764,14 +1773,6 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, } } - if (bootindex && - !virQEMUCapsGet(qemuCaps, QEMU_CAPS_BOOTINDEX) && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_BOOT) && - (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK || - disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) && - disk->bus != VIR_DOMAIN_DISK_BUS_IDE) - virBufferAddLit(&opt, ",boot=on"); - if (disk->src->readonly) virBufferAddLit(&opt, ",readonly=on"); @@ -2144,7 +2145,7 @@ qemuBuildDriveDevStr(const virDomainDef *def, disk->blockio.physical_block_size); } - qemuBuildDiskFrontendAttributes(disk, qemuCaps, &opt); + qemuBuildDiskFrontendAttributes(disk, qemuCaps, bootindex, &opt); if (disk->wwn) { if (STRPREFIX(disk->wwn, "0x")) diff --git a/tests/qemuxml2argvdata/qemuxml2argv-boot-complex.args b/tests/qemuxml2argvdata/qemuxml2argv-boot-complex.args index b7a2fc119a..78d6d2745a 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-boot-complex.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-boot-complex.args @@ -19,9 +19,9 @@ server,nowait \ -no-acpi \ -boot dnca \ -usb \ --drive file=/tmp/vda.img,format=raw,if=none,id=drive-virtio-disk0,boot=on \ +-drive file=/tmp/vda.img,format=raw,if=none,id=drive-virtio-disk0 \ -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,\ -id=virtio-disk0 \ +id=virtio-disk0,boot=on \ -drive file=/tmp/vdb.img,format=raw,if=none,id=drive-virtio-disk1 \ -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk1,\ id=virtio-disk1 \ -- 2.14.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list