[libvirt] [PATCH 3/4] qemu: Add support for reboot-timeout

2012-09-18 Thread Martin Kletzander
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

2012-09-18 Thread Michal Privoznik
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