From: Gleb Natapov <gleb@redhat.com>
To: Amos Kong <akong@redhat.com>
Cc: aliguori@us.ibm.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] add a boot parameter to set reboot timeout
Date: Thu, 6 Sep 2012 15:46:36 +0300 [thread overview]
Message-ID: <20120906124636.GC27250@redhat.com> (raw)
In-Reply-To: <1346935164-10936-1-git-send-email-akong@redhat.com>
On Thu, Sep 06, 2012 at 08:39:24PM +0800, Amos Kong wrote:
> Added an option to let qemu transfer a configuration file to bios,
> "etc/boot-fail-wait", which could be specified by command
> -boot reboot-timeout=T
> T have a max value of 0xffff, unit is ms.
>
> With this option, guest will wait for a given time if not find
> bootabled device, then reboot. This feature need the new seabios's
> support.
>
IMO default should be no reboot just like before Seabios change.
> Signed-off-by: Amos Kong <akong@redhat.com>
> ---
> hw/fw_cfg.c | 29 +++++++++++++++++++++++++++++
> qemu-config.c | 3 +++
> qemu-options.hx | 10 +++++++---
> vl.c | 3 ++-
> 4 files changed, 41 insertions(+), 4 deletions(-)
>
> diff --git a/hw/fw_cfg.c b/hw/fw_cfg.c
> index 7b3b576..a017184 100644
> --- a/hw/fw_cfg.c
> +++ b/hw/fw_cfg.c
> @@ -183,6 +183,34 @@ static void fw_cfg_bootsplash(FWCfgState *s)
> }
> }
>
> +static void fw_cfg_reboot(FWCfgState *s)
> +{
> + int reboot_timeout = -1;
> + char *p;
> + const char *temp;
> +
> + /* get user configuration */
> + QemuOptsList *plist = qemu_find_opts("boot-opts");
> + QemuOpts *opts = QTAILQ_FIRST(&plist->head);
> + if (opts != NULL) {
> + temp = qemu_opt_get(opts, "reboot-timeout");
> + if (temp != NULL) {
> + p = (char *)temp;
> + reboot_timeout = strtol(p, (char **)&p, 10);
> + }
> + }
> + if (reboot_timeout >= 0) {
> + /* validate the input */
> + if (reboot_timeout > 0xffff) {
> + error_report("reboot timeout is larger than 65535,"
> + " force it to 65535.");
> + reboot_timeout = 0xffff;
> + }
> + fw_cfg_add_file(s, "etc/boot-fail-wait", g_memdup(&reboot_timeout, 4),
> + 4);
> + }
> +}
> +
> static void fw_cfg_write(FWCfgState *s, uint8_t value)
> {
> int arch = !!(s->cur_entry & FW_CFG_ARCH_LOCAL);
> @@ -497,6 +525,7 @@ FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,
> fw_cfg_add_i16(s, FW_CFG_MAX_CPUS, (uint16_t)max_cpus);
> fw_cfg_add_i16(s, FW_CFG_BOOT_MENU, (uint16_t)boot_menu);
> fw_cfg_bootsplash(s);
> + fw_cfg_reboot(s);
>
> s->machine_ready.notify = fw_cfg_machine_ready;
> qemu_add_machine_init_done_notifier(&s->machine_ready);
> diff --git a/qemu-config.c b/qemu-config.c
> index c05ffbc..b9f9e0f 100644
> --- a/qemu-config.c
> +++ b/qemu-config.c
> @@ -638,6 +638,9 @@ QemuOptsList qemu_boot_opts = {
> }, {
> .name = "splash-time",
> .type = QEMU_OPT_STRING,
> + }, {
> + .name = "reboot-timeout",
> + .type = QEMU_OPT_STRING,
> },
> { /*End of list */ }
> },
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 3c411c4..d50505b 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -339,13 +339,14 @@ ETEXI
>
> DEF("boot", HAS_ARG, QEMU_OPTION_boot,
> "-boot [order=drives][,once=drives][,menu=on|off]\n"
> - " [,splash=sp_name][,splash-time=sp_time]\n"
> + " [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time]\n"
> " 'drives': floppy (a), hard disk (c), CD-ROM (d), network (n)\n"
> " 'sp_name': the file's name that would be passed to bios as logo picture, if menu=on\n"
> - " 'sp_time': the period that splash picture last if menu=on, unit is ms\n",
> + " 'sp_time': the period that splash picture last if menu=on, unit is ms\n"
> + " 'rb_timeout': the timeout before guest reboot when boot failed, unit is ms\n",
> QEMU_ARCH_ALL)
> STEXI
> -@item -boot [order=@var{drives}][,once=@var{drives}][,menu=on|off][,splash=@var{sp_name}][,splash-time=@var{sp_time}]
> +@item -boot [order=@var{drives}][,once=@var{drives}][,menu=on|off][,splash=@var{sp_name}][,splash-time=@var{sp_time}][,reboot-timeout=@var{rb_timeout}]
> @findex -boot
> Specify boot order @var{drives} as a string of drive letters. Valid
> drive letters depend on the target achitecture. The x86 PC uses: a, b
> @@ -364,6 +365,9 @@ limitation: The splash file could be a jpeg file or a BMP file in 24 BPP
> format(true color). The resolution should be supported by the SVGA mode, so
> the recommended is 320x240, 640x480, 800x640.
>
> +A timeout could be passed to bios, guest will pause for @var{rb_timeout} ms
> +when boot failed, then reboot.
> +
> @example
> # try to boot from network first, then from hard disk
> qemu-system-i386 -boot order=nc
> diff --git a/vl.c b/vl.c
> index 7c577fa..1bd9931 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -2622,7 +2622,8 @@ int main(int argc, char **argv, char **envp)
> {
> static const char * const params[] = {
> "order", "once", "menu",
> - "splash", "splash-time", NULL
> + "splash", "splash-time",
> + "reboot-timeout", NULL
> };
> char buf[sizeof(boot_devices)];
> char *standard_boot_devices;
> --
> 1.7.1
--
Gleb.
next prev parent reply other threads:[~2012-09-06 12:46 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-06 4:15 [Qemu-devel] RFC: Add a new boot parameter to set delay time before seabios retry to boot Amos Kong
2012-09-06 6:21 ` Gleb Natapov
2012-09-06 12:39 ` [Qemu-devel] [PATCH] add a boot parameter to set reboot timeout Amos Kong
2012-09-06 12:46 ` Gleb Natapov [this message]
2012-09-07 2:41 ` Amos Kong
2012-09-06 13:36 ` [Qemu-devel] RFC: Add a new boot parameter to set delay time before seabios retry to boot Anthony Liguori
2012-09-06 21:25 ` [Qemu-devel] [SeaBIOS] " Steve Goodrich
2012-09-07 1:10 ` [Qemu-devel] " Kevin O'Connor
2012-09-07 3:11 ` [Qemu-devel] [PATCH v2] add a boot parameter to set reboot timeout Amos Kong
2012-09-20 3:15 ` Amos Kong
2012-09-20 6:18 ` Gleb Natapov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120906124636.GC27250@redhat.com \
--to=gleb@redhat.com \
--cc=akong@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.