summaryrefslogtreecommitdiffstats
path: root/discover
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-05-21 13:57:56 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-06-24 12:52:50 +0800
commit3cc90580d7c444f75b07282568e83053eb4d54dc (patch)
treec31abf47095fa8b72dbd2d52674f6a105a21fd3a /discover
parent01f60e05ef83e3b91f7084ed95e6cc07412c8bb9 (diff)
downloadtalos-petitboot-3cc90580d7c444f75b07282568e83053eb4d54dc.tar.gz
talos-petitboot-3cc90580d7c444f75b07282568e83053eb4d54dc.zip
discover: Add countdown before default boot
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover')
-rw-r--r--discover/device-handler.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/discover/device-handler.c b/discover/device-handler.c
index f1632f0..5b7c02e 100644
--- a/discover/device-handler.c
+++ b/discover/device-handler.c
@@ -32,6 +32,7 @@ struct device_handler {
struct waitset *waitset;
struct waiter *timeout_waiter;
+ unsigned int sec_to_boot;
struct discover_boot_option *default_boot_option;
struct list unresolved_boot_options;
@@ -387,13 +388,41 @@ static void boot_status(void *arg, struct boot_status *status)
discover_server_notify_boot_status(handler->server, status);
}
+static void countdown_status(struct device_handler *handler,
+ struct discover_boot_option *opt, unsigned int sec)
+{
+ struct boot_status status;
+
+ status.type = BOOT_STATUS_INFO;
+ status.progress = -1;
+ status.detail = NULL;
+ status.message = talloc_asprintf(handler,
+ "Booting %s in %d sec", opt->option->name, sec);
+
+ discover_server_notify_boot_status(handler->server, &status);
+
+ talloc_free(status.message);
+}
+
static int default_timeout(void *arg)
{
struct device_handler *handler = arg;
+ struct discover_boot_option *opt;
if (!handler->default_boot_option)
return 0;
+ opt = handler->default_boot_option;
+
+ if (handler->sec_to_boot) {
+ countdown_status(handler, opt, handler->sec_to_boot);
+ handler->sec_to_boot--;
+ handler->timeout_waiter = waiter_register_timeout(
+ handler->waitset, 1000,
+ default_timeout, handler);
+ return 0;
+ }
+
boot(handler, handler->default_boot_option, NULL,
handler->dry_run, boot_status, handler);
return 0;
@@ -406,9 +435,8 @@ static void set_default(struct device_handler *handler,
return;
handler->default_boot_option = opt;
- handler->timeout_waiter = waiter_register_timeout(handler->waitset,
- DEFAULT_BOOT_TIMEOUT_SEC * 1000,
- default_timeout, handler);
+ handler->sec_to_boot = DEFAULT_BOOT_TIMEOUT_SEC;
+ default_timeout(handler);
}
static bool resource_is_resolved(struct resource *res)
OpenPOWER on IntegriCloud