X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fboot.c;h=313bd2af2de9b7e23de69309d8cac3b93dc8b8f2;hp=18bca58576d68b18e2dd3595cf7bf9ab08fdc4d1;hb=43b0a412efc1dfd8f2484a8b1e8aae11a855763c;hpb=b3d241164a7e34eed56159f4e0a8a2821b7ebf4d diff --git a/discover/boot.c b/discover/boot.c index 18bca58..313bd2a 100644 --- a/discover/boot.c +++ b/discover/boot.c @@ -31,6 +31,7 @@ enum boot_process_state { BOOT_STATE_INITIAL, BOOT_STATE_IMAGE_LOADING, BOOT_STATE_INITRD_LOADING, + BOOT_STATE_DTB_LOADING, BOOT_STATE_FINISH, BOOT_STATE_UNKNOWN, }; @@ -287,7 +288,7 @@ static void run_boot_hooks(struct boot_task *task) free(hooks); } -static void boot_process(void *ctx, int status __attribute__((unused))) +static void boot_process(void *ctx, int status) { struct boot_task *task = ctx; unsigned int clean_image = 0; @@ -305,13 +306,20 @@ static void boot_process(void *ctx, int status __attribute__((unused))) BOOT_STATUS_ERROR, "Couldn't load kernel image"); goto no_load; - } else { - task->state = BOOT_STATE_IMAGE_LOADING; - return; } + task->state = BOOT_STATE_IMAGE_LOADING; + return; } if (task->state == BOOT_STATE_IMAGE_LOADING) { + if (status) { + update_status(task->status_fn, task->status_arg, + BOOT_STATUS_ERROR, + "Error loading kernel image"); + goto no_load; + } + task->state = BOOT_STATE_INITRD_LOADING; + if (task->initrd) { update_status(task->status_fn, task->status_arg, BOOT_STATUS_INFO, "loading initrd"); @@ -322,16 +330,20 @@ static void boot_process(void *ctx, int status __attribute__((unused))) BOOT_STATUS_ERROR, "Couldn't load initrd image"); goto no_load; - } else { - task->state = BOOT_STATE_INITRD_LOADING; - return; } - } else { - task->state = BOOT_STATE_INITRD_LOADING; + return; } } if (task->state == BOOT_STATE_INITRD_LOADING) { + if (status) { + update_status(task->status_fn, task->status_arg, + BOOT_STATUS_ERROR, + "Error loading initrd"); + goto no_load; + } + task->state = BOOT_STATE_DTB_LOADING; + if (task->dtb) { update_status(task->status_fn, task->status_arg, BOOT_STATUS_INFO, @@ -343,15 +355,22 @@ static void boot_process(void *ctx, int status __attribute__((unused))) BOOT_STATUS_ERROR, "Couldn't load device tree"); goto no_load; - } else { - task->state = BOOT_STATE_FINISH; - return; } - } else { - task->state = BOOT_STATE_FINISH; + return; + } + } + + if (task->state == BOOT_STATE_DTB_LOADING) { + if (status) { + update_status(task->status_fn, task->status_arg, + BOOT_STATUS_ERROR, + "Error loading dtb"); + goto no_load; } + task->state = BOOT_STATE_FINISH; } + if (task->state != BOOT_STATE_FINISH) { task->state = BOOT_STATE_UNKNOWN; return;