mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
Optimize machine option to set more options with it
Currently, -machine option is used only when dump-guest-core is set. To use options defined in machine option for newer version of QEMU, it needs to use -machine xxx, and to be compatible with older version -M, this patch adds QEMU_CAPS_MACHINE_OPT capability for newer version which supports -machine option. Signed-off-by: Li Zhang <zhlcindy@linux.vnet.ibm.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
f8e3221f99
commit
f84b92ea19
@ -215,6 +215,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
|
|||||||
"megasas",
|
"megasas",
|
||||||
|
|
||||||
"ipv6-migration", /* 135 */
|
"ipv6-migration", /* 135 */
|
||||||
|
"machine-opt",
|
||||||
);
|
);
|
||||||
|
|
||||||
struct _virQEMUCaps {
|
struct _virQEMUCaps {
|
||||||
@ -1093,6 +1094,9 @@ virQEMUCapsComputeCmdFlags(const char *help,
|
|||||||
if (strstr(help, "-dtb"))
|
if (strstr(help, "-dtb"))
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_DTB);
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_DTB);
|
||||||
|
|
||||||
|
if (strstr(help, "-machine"))
|
||||||
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_MACHINE_OPT);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handling of -incoming arg with varying features
|
* Handling of -incoming arg with varying features
|
||||||
* -incoming tcp (kvm >= 79, qemu >= 0.10.0)
|
* -incoming tcp (kvm >= 79, qemu >= 0.10.0)
|
||||||
@ -2316,6 +2320,8 @@ virQEMUCapsInitQMPBasic(virQEMUCapsPtr qemuCaps)
|
|||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_KVM_PIT);
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_NO_KVM_PIT);
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_DTB);
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_DTB);
|
||||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_IPV6_MIGRATION);
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_IPV6_MIGRATION);
|
||||||
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_MACHINE_OPT);
|
||||||
|
virQEMUCapsSet(qemuCaps, QEMU_CAPS_DUMP_GUEST_CORE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* qemu_capabilities.h: QEMU capabilities generation
|
* qemu_capabilities.h: QEMU capabilities generation
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006-2012 Red Hat, Inc.
|
* Copyright (C) 2006-2013 Red Hat, Inc.
|
||||||
* Copyright (C) 2006 Daniel P. Berrange
|
* Copyright (C) 2006 Daniel P. Berrange
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
@ -175,6 +175,7 @@ enum virQEMUCapsFlags {
|
|||||||
QEMU_CAPS_DTB = 133, /* -dtb file */
|
QEMU_CAPS_DTB = 133, /* -dtb file */
|
||||||
QEMU_CAPS_SCSI_MEGASAS = 134, /* -device megasas */
|
QEMU_CAPS_SCSI_MEGASAS = 134, /* -device megasas */
|
||||||
QEMU_CAPS_IPV6_MIGRATION = 135, /* -incoming [::] */
|
QEMU_CAPS_IPV6_MIGRATION = 135, /* -incoming [::] */
|
||||||
|
QEMU_CAPS_MACHINE_OPT = 136, /* -machine xxxx*/
|
||||||
|
|
||||||
QEMU_CAPS_LAST, /* this must always be the last item */
|
QEMU_CAPS_LAST, /* this must always be the last item */
|
||||||
};
|
};
|
||||||
|
@ -5207,27 +5207,36 @@ qemuBuildMachineArgStr(virCommandPtr cmd,
|
|||||||
if (!def->os.machine)
|
if (!def->os.machine)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!def->mem.dump_core) {
|
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_OPT)) {
|
||||||
/* if no parameter to the machine type is needed, we still use
|
/* if no parameter to the machine type is needed, we still use
|
||||||
* '-M' to keep the most of the compatibility with older versions.
|
* '-M' to keep the most of the compatibility with older versions.
|
||||||
*/
|
*/
|
||||||
virCommandAddArgList(cmd, "-M", def->os.machine, NULL);
|
virCommandAddArgList(cmd, "-M", def->os.machine, NULL);
|
||||||
} else {
|
if (def->mem.dump_core) {
|
||||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DUMP_GUEST_CORE)) {
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
_("dump-guest-core is not available "
|
||||||
"%s", _("dump-guest-core is not available "
|
"with this QEMU binary"));
|
||||||
" with this QEMU binary"));
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||||
|
|
||||||
/* However, in case there is a parameter to be added, we need to
|
|
||||||
* use the "-machine" parameter because qemu is not parsing the
|
|
||||||
* "-M" correctly */
|
|
||||||
virCommandAddArg(cmd, "-machine");
|
virCommandAddArg(cmd, "-machine");
|
||||||
virCommandAddArgFormat(cmd,
|
virBufferAdd(&buf, def->os.machine, -1);
|
||||||
"%s,dump-guest-core=%s",
|
|
||||||
def->os.machine,
|
if (def->mem.dump_core) {
|
||||||
virDomainMemDumpTypeToString(def->mem.dump_core));
|
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DUMP_GUEST_CORE)) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
|
_("dump-guest-core is not available "
|
||||||
|
"with this QEMU binary"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
virBufferAsprintf(&buf, ",dump-guest-core=%s",
|
||||||
|
virDomainMemDumpTypeToString(def->mem.dump_core));
|
||||||
|
}
|
||||||
|
|
||||||
|
virCommandAddArgBuffer(cmd, &buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -718,6 +718,7 @@ mymain(void)
|
|||||||
QEMU_CAPS_SCSI_LSI,
|
QEMU_CAPS_SCSI_LSI,
|
||||||
QEMU_CAPS_BLOCKIO,
|
QEMU_CAPS_BLOCKIO,
|
||||||
QEMU_CAPS_VNC,
|
QEMU_CAPS_VNC,
|
||||||
|
QEMU_CAPS_MACHINE_OPT,
|
||||||
QEMU_CAPS_DEVICE_QXL,
|
QEMU_CAPS_DEVICE_QXL,
|
||||||
QEMU_CAPS_DEVICE_VGA,
|
QEMU_CAPS_DEVICE_VGA,
|
||||||
QEMU_CAPS_DEVICE_CIRRUS_VGA,
|
QEMU_CAPS_DEVICE_CIRRUS_VGA,
|
||||||
@ -806,6 +807,7 @@ mymain(void)
|
|||||||
QEMU_CAPS_VIRTIO_SCSI,
|
QEMU_CAPS_VIRTIO_SCSI,
|
||||||
QEMU_CAPS_BLOCKIO,
|
QEMU_CAPS_BLOCKIO,
|
||||||
QEMU_CAPS_VNC,
|
QEMU_CAPS_VNC,
|
||||||
|
QEMU_CAPS_MACHINE_OPT,
|
||||||
QEMU_CAPS_DEVICE_QXL,
|
QEMU_CAPS_DEVICE_QXL,
|
||||||
QEMU_CAPS_DEVICE_VGA,
|
QEMU_CAPS_DEVICE_VGA,
|
||||||
QEMU_CAPS_DEVICE_CIRRUS_VGA,
|
QEMU_CAPS_DEVICE_CIRRUS_VGA,
|
||||||
@ -904,6 +906,7 @@ mymain(void)
|
|||||||
QEMU_CAPS_SECCOMP_SANDBOX,
|
QEMU_CAPS_SECCOMP_SANDBOX,
|
||||||
QEMU_CAPS_DUMP_GUEST_CORE,
|
QEMU_CAPS_DUMP_GUEST_CORE,
|
||||||
QEMU_CAPS_VNC,
|
QEMU_CAPS_VNC,
|
||||||
|
QEMU_CAPS_MACHINE_OPT,
|
||||||
QEMU_CAPS_USB_REDIR_BOOTINDEX,
|
QEMU_CAPS_USB_REDIR_BOOTINDEX,
|
||||||
QEMU_CAPS_USB_HOST_BOOTINDEX,
|
QEMU_CAPS_USB_HOST_BOOTINDEX,
|
||||||
QEMU_CAPS_DEVICE_QXL,
|
QEMU_CAPS_DEVICE_QXL,
|
||||||
@ -1011,6 +1014,7 @@ mymain(void)
|
|||||||
QEMU_CAPS_SECCOMP_SANDBOX,
|
QEMU_CAPS_SECCOMP_SANDBOX,
|
||||||
QEMU_CAPS_DUMP_GUEST_CORE,
|
QEMU_CAPS_DUMP_GUEST_CORE,
|
||||||
QEMU_CAPS_VNC,
|
QEMU_CAPS_VNC,
|
||||||
|
QEMU_CAPS_MACHINE_OPT,
|
||||||
QEMU_CAPS_USB_REDIR_BOOTINDEX,
|
QEMU_CAPS_USB_REDIR_BOOTINDEX,
|
||||||
QEMU_CAPS_USB_HOST_BOOTINDEX,
|
QEMU_CAPS_USB_HOST_BOOTINDEX,
|
||||||
QEMU_CAPS_DEVICE_QXL,
|
QEMU_CAPS_DEVICE_QXL,
|
||||||
|
@ -363,9 +363,12 @@ mymain(void)
|
|||||||
DO_TEST("minimal-s390", QEMU_CAPS_NAME);
|
DO_TEST("minimal-s390", QEMU_CAPS_NAME);
|
||||||
DO_TEST("machine-aliases1", NONE);
|
DO_TEST("machine-aliases1", NONE);
|
||||||
DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
|
DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
|
||||||
DO_TEST("machine-core-on", QEMU_CAPS_DUMP_GUEST_CORE);
|
DO_TEST("machine-core-on", QEMU_CAPS_MACHINE_OPT,
|
||||||
DO_TEST("machine-core-off", QEMU_CAPS_DUMP_GUEST_CORE);
|
QEMU_CAPS_DUMP_GUEST_CORE);
|
||||||
|
DO_TEST("machine-core-off", QEMU_CAPS_MACHINE_OPT,
|
||||||
|
QEMU_CAPS_DUMP_GUEST_CORE);
|
||||||
DO_TEST_FAILURE("machine-core-on", NONE);
|
DO_TEST_FAILURE("machine-core-on", NONE);
|
||||||
|
DO_TEST_FAILURE("machine-core-on", QEMU_CAPS_MACHINE_OPT);
|
||||||
DO_TEST("boot-cdrom", NONE);
|
DO_TEST("boot-cdrom", NONE);
|
||||||
DO_TEST("boot-network", NONE);
|
DO_TEST("boot-network", NONE);
|
||||||
DO_TEST("boot-floppy", NONE);
|
DO_TEST("boot-floppy", NONE);
|
||||||
|
Loading…
Reference in New Issue
Block a user