Patchwork Save arguments as well as image name for CAS reboot

login
register
mail settings
Submitter Paul Mackerras
Date Oct. 14, 2011, 4:01 a.m.
Message ID <20111014040112.GA11118@bloggs.ozlabs.ibm.com>
Download mbox | patch
Permalink /patch/119689/
State Accepted
Headers show

Comments

Paul Mackerras - Oct. 14, 2011, 4:01 a.m.
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 <paulus@samba.org>
---
 second/yaboot.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)

Patch

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, &params->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;