From 52ad93077e5334581d05ade8e55575573b98087e Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Thu, 13 Oct 2011 18:01:12 +0000 Subject: [PATCH] Save arguments as well as image name for CAS reboot We were saving the image name that the user had typed (or had been selected by default) in the "boot-last-label" property, but we were losing any extra arguments that the user had typed after the image name. On a pSeries machine, if the firmware decides to do a reboot at the client-architecture-support call, we were then rebooting to the right image but without any extra arguments that the user typed. This fixes the problem by saving the arguments in boot-last-label, separated from the image name by a space. When we use the value of boot-last-label, we now call word_split to separate it into the image name and arguments again. Signed-off-by: Paul Mackerras Signed-off-by: Tony Breeds --- second/yaboot.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/second/yaboot.c b/second/yaboot.c index b7b9280..1f3f151 100644 --- a/second/yaboot.c +++ b/second/yaboot.c @@ -709,9 +709,10 @@ int get_params(struct boot_param_t* params) if (!imagename) { if (bootoncelabel[0] != 0) imagename = bootoncelabel; - else if (bootlastlabel[0] != 0) - imagename = bootlastlabel; - else + else if (bootlastlabel[0] != 0) { + imagename = bootlastlabel; + word_split(&imagename, ¶ms->args); + } else imagename = cfg_get_default(); } if (imagename) @@ -773,7 +774,13 @@ int get_params(struct boot_param_t* params) imagename = cfg_get_default(); /* write the imagename out so it can be reused on reboot if necessary */ - prom_set_options("boot-last-label", imagename, strlen(imagename)); + strcpy(bootlastlabel, imagename); + if (params->args && params->args[0]) { + strcat(bootlastlabel, " "); + strcat(bootlastlabel, params->args); + } + prom_set_options("boot-last-label", bootlastlabel, + strlen(bootlastlabel) + 1); label = 0; defdevice = boot.dev; -- 2.39.2