+ /* start async loads for boot resources */
+ rc = start_url_load(boot_task, "kernel image", image, &boot_task->image)
+ || start_url_load(boot_task, "initrd", initrd, &boot_task->initrd)
+ || start_url_load(boot_task, "dtb", dtb, &boot_task->dtb);
+
+ if (rc) {
+ /* Don't call boot_cancel() to preserve the status update */
+ boot_task->cancelled = true;
+ cleanup_cancellations(boot_task, NULL);
+ return NULL;
+ }
+
+ boot_process(NULL, boot_task);
+
+ return boot_task;
+}
+
+void boot_cancel(struct boot_task *task)
+{
+ task->cancelled = true;
+
+ update_status(task->status_fn, task->status_arg, BOOT_STATUS_INFO,
+ _("Boot cancelled"));
+
+ cleanup_cancellations(task, NULL);