[libvirt] [PATCH 3/4] qemu: Add support for reboot-timeout
This patch adds support for -boot reboot-timeout=rb_time that is added in QEMU. --- src/qemu/qemu_capabilities.c | 4 src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 36 3 files changed, 41 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 278b550..3582cbd 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -180,6 +180,8 @@ VIR_ENUM_IMPL(qemuCaps, QEMU_CAPS_LAST, ide-drive.wwn, scsi-disk.wwn, seccomp-sandbox, + + reboot-timeout, /* 110 */ ); struct _qemuCaps { @@ -1191,6 +1193,8 @@ qemuCapsComputeCmdFlags(const char *help, qemuCapsSet(caps, QEMU_CAPS_NESTING); if (strstr(help, ,menu=on)) qemuCapsSet(caps, QEMU_CAPS_BOOT_MENU); +if (strstr(help, ,reboot-timeout=rb_time)) +qemuCapsSet(caps, QEMU_CAPS_REBOOT_TIMEOUT); if ((fsdev = strstr(help, -fsdev))) { qemuCapsSet(caps, QEMU_CAPS_FSDEV); if (strstr(fsdev, readonly)) diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 4da2a29..2201cb3 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -145,6 +145,7 @@ enum qemuCapsFlags { QEMU_CAPS_IDE_DRIVE_WWN = 107, /* Is ide-drive.wwn available? */ QEMU_CAPS_SCSI_DISK_WWN = 108, /* Is scsi-disk.wwn available? */ QEMU_CAPS_SECCOMP_SANDBOX= 109, /* -sandbox */ +QEMU_CAPS_REBOOT_TIMEOUT = 110, /* -boot reboot-timeout */ QEMU_CAPS_LAST, /* this must always be the last item */ }; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f8012ec..d35c5c3 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4945,7 +4945,26 @@ qemuBuildCommandLine(virConnectPtr conn, VIR_WARN(bootmenu is enabled but not supported by this QEMU binary); } +} + +if (def-os.rebootTimeout.enabled) { +if (!qemuCapsGet(caps, QEMU_CAPS_REBOOT_TIMEOUT)) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, %s, + _(reboot timeout is not supported + by this QEMU binary)); +goto error; +} +if (boot_nparams++) +virBufferAddChar(boot_buf, ','); + +if (def-os.rebootTimeout.enabled == VIR_DOMAIN_REBOOT_TIMEOUT_DISABLED) +virBufferAddLit(boot_buf, +reboot-timeout=-1); +else +virBufferAsprintf(boot_buf, + reboot-timeout=%d, + def-os.rebootTimeout.delay); } if (boot_nparams 0) { @@ -8271,6 +8290,23 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps, qemuParseCommandLineBootDevs(def, token); } else if (STRPREFIX(token, menu=on)) { def-os.bootmenu = 1; +} else if (STRPREFIX(token, reboot-timeout=)) { +int num; +char *endptr = strchr(token, ','); +if (virStrToLong_i(token + strlen(reboot-timeout=), + endptr, 0, num) 0) { +virReportError(VIR_ERR_INTERNAL_ERROR, %s, + _(cannot parse reboot-timeout value)); +goto error; +} +if (num 0) { +def-os.rebootTimeout.enabled = VIR_DOMAIN_REBOOT_TIMEOUT_DISABLED; +} else { +def-os.rebootTimeout.enabled = VIR_DOMAIN_REBOOT_TIMEOUT_ENABLED; +if (num 0x) +num = 0x; +def-os.rebootTimeout.delay = num; +} } token = strchr(token, ','); /* This incrementation has to be done here in order to make it -- 1.7.12 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 3/4] qemu: Add support for reboot-timeout
On 18.09.2012 17:36, Martin Kletzander wrote: This patch adds support for -boot reboot-timeout=rb_time that is added in QEMU. --- src/qemu/qemu_capabilities.c | 4 src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 36 3 files changed, 41 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 278b550..3582cbd 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -180,6 +180,8 @@ VIR_ENUM_IMPL(qemuCaps, QEMU_CAPS_LAST, ide-drive.wwn, scsi-disk.wwn, seccomp-sandbox, + + reboot-timeout, /* 110 */ ); struct _qemuCaps { @@ -1191,6 +1193,8 @@ qemuCapsComputeCmdFlags(const char *help, qemuCapsSet(caps, QEMU_CAPS_NESTING); if (strstr(help, ,menu=on)) qemuCapsSet(caps, QEMU_CAPS_BOOT_MENU); +if (strstr(help, ,reboot-timeout=rb_time)) +qemuCapsSet(caps, QEMU_CAPS_REBOOT_TIMEOUT); if ((fsdev = strstr(help, -fsdev))) { qemuCapsSet(caps, QEMU_CAPS_FSDEV); if (strstr(fsdev, readonly)) diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 4da2a29..2201cb3 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -145,6 +145,7 @@ enum qemuCapsFlags { QEMU_CAPS_IDE_DRIVE_WWN = 107, /* Is ide-drive.wwn available? */ QEMU_CAPS_SCSI_DISK_WWN = 108, /* Is scsi-disk.wwn available? */ QEMU_CAPS_SECCOMP_SANDBOX= 109, /* -sandbox */ +QEMU_CAPS_REBOOT_TIMEOUT = 110, /* -boot reboot-timeout */ QEMU_CAPS_LAST, /* this must always be the last item */ }; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f8012ec..d35c5c3 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4945,7 +4945,26 @@ qemuBuildCommandLine(virConnectPtr conn, VIR_WARN(bootmenu is enabled but not supported by this QEMU binary); } +} + +if (def-os.rebootTimeout.enabled) { +if (!qemuCapsGet(caps, QEMU_CAPS_REBOOT_TIMEOUT)) { +virReportError(VIR_ERR_CONFIG_UNSUPPORTED, %s, + _(reboot timeout is not supported + by this QEMU binary)); +goto error; +} +if (boot_nparams++) +virBufferAddChar(boot_buf, ','); + +if (def-os.rebootTimeout.enabled == VIR_DOMAIN_REBOOT_TIMEOUT_DISABLED) +virBufferAddLit(boot_buf, +reboot-timeout=-1); +else +virBufferAsprintf(boot_buf, + reboot-timeout=%d, + def-os.rebootTimeout.delay); } if (boot_nparams 0) { @@ -8271,6 +8290,23 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps, qemuParseCommandLineBootDevs(def, token); } else if (STRPREFIX(token, menu=on)) { def-os.bootmenu = 1; +} else if (STRPREFIX(token, reboot-timeout=)) { +int num; +char *endptr = strchr(token, ','); +if (virStrToLong_i(token + strlen(reboot-timeout=), + endptr, 0, num) 0) { +virReportError(VIR_ERR_INTERNAL_ERROR, %s, + _(cannot parse reboot-timeout value)); +goto error; +} +if (num 0) { +def-os.rebootTimeout.enabled = VIR_DOMAIN_REBOOT_TIMEOUT_DISABLED; +} else { +def-os.rebootTimeout.enabled = VIR_DOMAIN_REBOOT_TIMEOUT_ENABLED; +if (num 0x) +num = 0x; +def-os.rebootTimeout.delay = num; s/0x/65535/g +} } token = strchr(token, ','); /* This incrementation has to be done here in order to make it ACK Michal -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list