s390/ipl: Use diagnose 8 command separation
authorMichael Holzheu <holzheu@linux.vnet.ibm.com>
Tue, 24 Jul 2012 16:43:02 +0000 (18:43 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 26 Jul 2012 08:07:26 +0000 (10:07 +0200)
Currently the vmcmd shutdown action is parsed by the kernel and
if multiple cp commands have been specified, they are issued
separately with the cpcmd() function.

The underlying diagnose 8 instruction already allows to specify
multiple commands that are separated by 0x15. The ASCEBC() function
used by cpcmd() translates '\n' to 0x15. The '\n' character is
currently used as vmcmd command separator and therefore the vmcmd
string can be passed directly to the cpcmd() function.

Using the diagnose 8 command separation has the advantage that also
after disruptive commands that stop Linux, for example "def store",
additional commands can be executed.

Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/ipl.c

index e64d141555ce99843f4995827f4644e1dc127c79..6ffcd3203215a2bcacb50bc35ae12229113b0ff4 100644 (file)
@@ -1583,7 +1583,7 @@ static struct kset *vmcmd_kset;
 
 static void vmcmd_run(struct shutdown_trigger *trigger)
 {
-       char *cmd, *next_cmd;
+       char *cmd;
 
        if (strcmp(trigger->name, ON_REIPL_STR) == 0)
                cmd = vmcmd_on_reboot;
@@ -1600,15 +1600,7 @@ static void vmcmd_run(struct shutdown_trigger *trigger)
 
        if (strlen(cmd) == 0)
                return;
-       do {
-               next_cmd = strchr(cmd, '\n');
-               if (next_cmd) {
-                       next_cmd[0] = 0;
-                       next_cmd += 1;
-               }
-               __cpcmd(cmd, NULL, 0, NULL);
-               cmd = next_cmd;
-       } while (cmd != NULL);
+       __cpcmd(cmd, NULL, 0, NULL);
 }
 
 static int vmcmd_init(void)