X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=discover%2Fdevice-handler.c;h=43171eb7e1d7f0e2f6ec95392d364597dfa8c1cf;hb=7c8683fa009115f8a3b08b7a7666b64ebcbbc1bc;hp=594a7c3c80a87b2c142cd17730cf09f46b50b149;hpb=19dab336ae13f0476bfbf0db34f1329a802eeb8e;p=petitboot diff --git a/discover/device-handler.c b/discover/device-handler.c index 594a7c3..43171eb 100644 --- a/discover/device-handler.c +++ b/discover/device-handler.c @@ -75,6 +75,7 @@ static void boot_option_finalise(struct discover_boot_option *opt) assert(!opt->option->boot_image_file); assert(!opt->option->initrd_file); assert(!opt->option->icon_file); + assert(!opt->option->device_id); if (opt->boot_image) opt->option->boot_image_file = opt->boot_image->url->full; @@ -82,6 +83,8 @@ static void boot_option_finalise(struct discover_boot_option *opt) opt->option->initrd_file = opt->initrd->url->full; if (opt->icon) opt->option->icon_file = opt->icon->url->full; + + opt->option->device_id = opt->device->device->id; } static void process_boot_option_queue(struct device_handler *handler) @@ -149,8 +152,20 @@ static void context_commit(struct device_handler *handler, discover_server_notify_boot_option_add(handler->server, opt->option); } else { - list_add(&handler->unresolved_boot_options, &opt->list); - talloc_steal(handler, opt); + if (!opt->source->resolve_resource) { + pb_log("parser %s gave us an unresolved " + "resource (%s), but no way to " + "resolve it\n", + opt->source->name, opt->option->id); + talloc_free(opt); + } else { + pb_log("boot option %s is unresolved, " + "adding to queue\n", + opt->option->id); + list_add(&handler->unresolved_boot_options, + &opt->list); + talloc_steal(handler, opt); + } } } } @@ -159,7 +174,7 @@ void discover_context_add_boot_option(struct discover_context *ctx, struct discover_boot_option *boot_option) { boot_option->source = ctx->parser; - list_add(&ctx->boot_options, &boot_option->list); + list_add_tail(&ctx->boot_options, &boot_option->list); talloc_steal(ctx, boot_option); } @@ -663,6 +678,13 @@ static struct discover_boot_option *find_boot_option_by_id( return NULL; } +static void boot_status(void *arg, struct boot_status *status) +{ + struct device_handler *handler = arg; + + discover_server_notify_boot_status(handler->server, status); +} + void device_handler_boot(struct device_handler *handler, struct boot_command *cmd) { @@ -670,5 +692,5 @@ void device_handler_boot(struct device_handler *handler, opt = find_boot_option_by_id(handler, cmd->option_id); - boot(handler, opt, cmd, handler->dry_run); + boot(handler, opt, cmd, handler->dry_run, boot_status, handler); }