]> Zhao Yanbai Git Server - minix.git/commitdiff
Remove ability to pass commands to bootloader
authorErik van der Kouwe <erik@minix3.org>
Thu, 22 Nov 2012 16:30:22 +0000 (17:30 +0100)
committerErik van der Kouwe <erik@minix3.org>
Thu, 22 Nov 2012 18:16:17 +0000 (19:16 +0100)
14 files changed:
commands/reboot/halt.c
commands/reboot/shutdown.c
include/minix/com.h
include/minix/syslib.h
include/sys/reboot.h
include/unistd.h
kernel/arch/i386/arch_reset.c
kernel/main.c
kernel/system/do_abort.c
lib/libc/sys-minix/reboot.c
lib/libsys/sys_abort.c
man/man2/reboot.2
man/man8/shutdown.8
servers/pm/param.h

index 60d1ad9c22f91f086c492285f065bddf3cfae8b2..dd0bff28be3087297c997fce5f9e4ff275716ea1 100644 (file)
@@ -29,12 +29,11 @@ void usage( void );
 int main( int argc, char *argv[] );
 
 char *prog;
-char *reboot_code = "delay; boot";
 
 void
 usage()
 {
-  fprintf(stderr, "Usage: %s [-hrRfpd] [-x reboot-code]\n", prog);
+  fprintf(stderr, "Usage: %s [-hrRfpd]\n", prog);
   exit(1);
 }
 
@@ -47,7 +46,6 @@ char **argv;
   int fast = 0;                        /* fast halt/reboot, don't bother being nice. */
   int i;
   struct stat dummy;
-  char *monitor_code = "";
   pid_t pid;
 
   if ((prog = strrchr(argv[0],'/')) == NULL) prog = argv[0]; else prog++;
@@ -68,15 +66,6 @@ char **argv;
       case 'd': flag = RBT_DEFAULT;    break;
       case 'p': flag = RBT_POWEROFF;   break;
       case 'f': fast = 1; break;
-      case 'x':
-       flag = RBT_MONITOR;
-       if (*opt == 0) {
-         if (i == argc) usage();
-         opt = argv[i++];
-       }
-       monitor_code = opt;
-       opt = "";
-       break;
       default:
        usage();
     }
@@ -89,11 +78,6 @@ char **argv;
     exit(1);
   }
 
-  if (flag == RBT_REBOOT) {
-       flag = RBT_MONITOR;             /* set monitor code for reboot */
-       monitor_code = reboot_code;
-  }
-
   if (stat("/usr/bin", &dummy) < 0) {
     /* It seems that /usr isn't present, let's assume "-f." */
     fast = 1;
@@ -135,7 +119,7 @@ char **argv;
 
   sync();
 
-  reboot(flag, monitor_code, strlen(monitor_code));
+  reboot(flag);
   fprintf(stderr, "%s: reboot(): %s\n", prog, strerror(errno));
   return 1;
 }
index 57e00f1323ee3621e773179d792bb1c000d47066..c5e40873ae899b0e1ade888159d368887d435013 100644 (file)
@@ -18,7 +18,6 @@
 
   New Minix options:
    -C: crash check, i.e. is the last wtmp entry a shutdown entry?
-   -x: let the monitor execute the given code
    -R: reset the system
    -d: default CTRL-ALT-DEL shutdown for current bootloader
  */
@@ -63,7 +62,6 @@ long wait_time=0L;
 char message[1024];
 char info[80];
 int reboot_flag='h';                   /* default is halt */
-char *reboot_code="";                  /* optional monitor code */
 int info_min, info_hour;
 char *prog;
 
@@ -132,7 +130,7 @@ char *argv[];
   char *opt;
   int tty;
   static char HALT1[] = "-?";
-  static char *HALT[] = { "shutdown", HALT1, NULL, NULL };
+  static char *HALT[] = { "shutdown", HALT1, NULL };
 
   /* Parse options. */
   for (i = 1; i < argc && argv[i][0] == '-'; i++) {
@@ -149,23 +147,9 @@ char *argv[];
       case 'h':
       case 'r':
       case 'p':
-      case 'x':
       case 'd':
-       reboot_flag = *opt;
-       if (reboot_flag == 'x') {
-         if (*++opt == 0) {
-           if (++i == argc) {
-             fprintf (stderr,"shutdown: option '-x' requires an argument\n");
-             usage();
-           }
-           opt=argv[i];
-         }
-         reboot_code=opt;
-         opt+=strlen(opt)-1;
-       }
-       break;
       case 'R':
-       reboot_flag = 'R';
+       reboot_flag = *opt;
        break;
       case 'm':
        want_message = 1;
@@ -256,7 +240,6 @@ char *argv[];
   unlink(NOLOGIN);
 
   HALT[1][1] = reboot_flag;
-  if (reboot_flag == 'x') HALT[2] = reboot_code;
 #if __minix_vmd
   execv("/usr/sbin/halt", HALT);
 #else
@@ -274,16 +257,14 @@ char *argv[];
 
 void usage()
 {
-  fputs("Usage: shutdown [-hrRpmkd] [-x code] [time [message]]\n", stderr);
+  fputs("Usage: shutdown [-hrRpmkd] [time [message]]\n", stderr);
   fputs("       -h -> halt system after shutdown\n", stderr);
   fputs("       -r -> reboot system after shutdown\n", stderr);
   fputs("       -R -> reset system after shutdown\n", stderr);
   fputs("       -p -> power system off after shutdown\n", stderr);
-  fputs("       -x -> return to the monitor doing...\n", stderr);
   fputs("       -d -> default CTRL-ALT-DEL shutdown for current bootloader\n", stderr);
   fputs("       -m -> read a shutdown message from standard input\n", stderr);
   fputs("       -k -> stop an already running shutdown\n", stderr);
-  fputs("       code -> boot monitor code to be executed\n", stderr);
   fputs("       time -> keyword ``now'', minutes before shutdown ``+5'',\n", stderr);
   fputs("               or absolute time specification ``11:20''\n", stderr);
   fputs("       message -> short shutdown message\n", stderr);
index 8c3ade40163b5d4d73de2652c544c6d1998b5047..7d57e7b349e2091febbc930d72321fd14ac8ab4e 100644 (file)
 
 /* Field names for SYS_ABORT. */
 #define ABRT_HOW       m1_i1   /* RBT_REBOOT, RBT_HALT, etc. */
-#define ABRT_MON_ENDPT  m1_i2  /* process where monitor params are */
-#define ABRT_MON_LEN   m1_i3   /* length of monitor params */
-#define ABRT_MON_ADDR   m1_p1  /* virtual address of monitor params */
 
 /* Field names for SYS_IOPENABLE. */
 #define IOP_ENDPT      m2_l1   /* target endpoint */
index 8a8a05710ef17f8c2fb849acefc25195bcde88a5..38cea2e4944700435ea4d45da0d551f3a5881aae 100644 (file)
@@ -33,7 +33,7 @@ struct rs_pci;
 int _taskcall(endpoint_t who, int syscallnr, message *msgptr);
 int _kernel_call(int syscallnr, message *msgptr);
 
-int sys_abort(int how, ...);
+int sys_abort(int how);
 int sys_enable_iop(endpoint_t proc_ep);
 int sys_exec(endpoint_t proc_ep, char *ptr, char *aout, vir_bytes
        initpc);
index 3e8f6d44ecaf4101552c5baa7d696902c9258556..90d36ea172d4123112ffb14748b42688fd6d7817 100644 (file)
@@ -5,10 +5,9 @@
 #define RBT_HALT          0    /* shutdown and return to monitor */
 #define RBT_REBOOT        1    /* reboot the system through the monitor */
 #define RBT_PANIC         2    /* a server panics */
-#define RBT_MONITOR       3    /* let the monitor do this */
+#define RBT_POWEROFF      3    /* power off, reset if not possible */
 #define RBT_RESET         4    /* hard reset the system */
 #define RBT_DEFAULT       5    /* return to monitor, reset if not possible */
-#define RBT_POWEROFF      6    /* power off, reset if not possible */
-#define RBT_INVALID       7    /* first invalid reboot flag */
+#define RBT_INVALID       6    /* first invalid reboot flag */
 
 #endif
index 505f9ac23055c6c277c2cc444cfbd47a21adb89f..ef0a30a8eb89b27ff1f7e7c8bf6359da410df219 100644 (file)
@@ -356,7 +356,7 @@ void        psignal(int, const char *);
 #endif /* __PSIGNAL_DECLARED */
 int     rcmd(char **, int, const char *, const char *, const char *, int *);
 #ifdef __minix
-int     reboot(int, ...);
+int     reboot(int);
 #else
 int     reboot(int, char *);
 #endif
index 565a542f7674d5ccf18c7a155ac9c340a61e5caa..c78e8746d9e71775afe3b635229de378f49f3215 100644 (file)
@@ -118,10 +118,6 @@ __dead void arch_shutdown(int how)
                reset();
        }
 
-       if (how == RBT_DEFAULT) {
-               how = RBT_RESET;
-       }
-
        switch (how) {
                case RBT_HALT:
                        /* Stop */
@@ -133,7 +129,8 @@ __dead void arch_shutdown(int how)
                        poweroff();
                        NOT_REACHABLE;
 
-               default:        
+               default:
+               case RBT_DEFAULT:       
                case RBT_REBOOT:
                case RBT_RESET:
                        /* Reset the system by forcing a processor shutdown. 
index 45fbe2d4a089e699c9c4af2158ca4145a6e6444a..f107079e3a1078688127b55034f0fddcd9072063 100644 (file)
@@ -349,7 +349,7 @@ void minix_shutdown(timer_t *tp)
 {
 /* This function is called from prepare_shutdown or stop_sequence to bring 
  * down MINIX. How to shutdown is in the argument: RBT_HALT (return to the
- * monitor), RBT_MONITOR (execute given code), RBT_RESET (hard reset). 
+ * monitor), RBT_RESET (hard reset). 
  */
 #ifdef CONFIG_SMP
   /* 
index 8208af5248e3e7565fbec47ad5fc45dee78a4a44..c95a5d28e1d88861f641ab1d311ab41b7b210d0d 100644 (file)
@@ -3,9 +3,6 @@
  *
  * The parameters for this kernel call are:
  *    m1_i1:   ABRT_HOW        (how to abort, possibly fetch monitor params)   
- *    m1_i2:   ABRT_MON_ENDPT  (proc nr to get monitor params from)    
- *    m1_i3:   ABRT_MON_LEN    (length of monitor params)
- *    m1_p1:   ABRT_MON_ADDR   (virtual address of params)     
  */
 
 #include "kernel/system.h"
@@ -23,20 +20,6 @@ int do_abort(struct proc * caller, message * m_ptr)
  */
   int how = m_ptr->ABRT_HOW;
 
-  /* See if the monitor is to run the specified instructions. */
-  if (how == RBT_MONITOR) {
-      int p;
-      static char paramsbuffer[512];
-      int len;
-      len = MIN(m_ptr->ABRT_MON_LEN, sizeof(paramsbuffer)-1);
-
-      if((p=data_copy(m_ptr->ABRT_MON_ENDPT, (vir_bytes) m_ptr->ABRT_MON_ADDR,
-               KERNEL, (vir_bytes) paramsbuffer, len)) != OK) {
-               return p;
-      }
-      paramsbuffer[len] = '\0';
-  }
-
   /* Now prepare to shutdown MINIX. */
   prepare_shutdown(how);
   return(OK);                          /* pro-forma (really EDISASTER) */
index 7b81b9d43736b03b6e5edbd070ea10df39b7e0ed..393757b3c811b4ca6d588adac653bdcdb54b3f2a 100644 (file)
 #include <sys/reboot.h>
 #include <stdarg.h>
 
-int reboot(int how, ...)
+int reboot(int how)
 {
   message m;
-  va_list ap;
-
-  va_start(ap, how);
-  if ((m.m1_i1 = how) == RBT_MONITOR) {
-       m.m1_p1 = va_arg(ap, char *);
-       m.m1_i2 = va_arg(ap, size_t);
-  }
-  va_end(ap);
 
+  m.m1_i1 = how;
   return _syscall(PM_PROC_NR, REBOOT, &m);
 }
index 747537b4236ea5c44d69e54acc858c70c6d62668..a9403e54f2e8e45d70f214349ed788a7898c3723 100644 (file)
@@ -2,20 +2,12 @@
 #include <stdarg.h>
 #include <unistd.h>
 
-int sys_abort(int how, ...)
+int sys_abort(int how)
 {
 /* Something awful has happened.  Abandon ship. */
 
   message m;
-  va_list ap;
-
-  va_start(ap, how);
-  if ((m.ABRT_HOW = how) == RBT_MONITOR) {
-       m.ABRT_MON_ENDPT = va_arg(ap, int);
-       m.ABRT_MON_ADDR = va_arg(ap, char *);
-       m.ABRT_MON_LEN = va_arg(ap, size_t);
-  }
-  va_end(ap);
 
+  m.ABRT_HOW = how;
   return(_kernel_call(SYS_ABORT, &m));
 }
index 90c88897ce2168b09478a40c9ba64c42f45a7d30..eee86c9b429ffda36fa0a61939e05d562f3e7313 100644 (file)
@@ -8,7 +8,7 @@ reboot \- close down the system or reboot
 
 #include <unistd.h>
 
-int reboot(int \fIhow\fP, ...)
+int reboot(int \fIhow\fP)
 .fi
 .ft P
 .SH DESCRIPTION
@@ -18,11 +18,12 @@ down depending on
 .IR how :
 .PP
 .TP 5
-.BI "reboot(RBT_HALT)"
-Halt the system and return to the monitor prompt.
+.BI "reboot(RBT_DEFAULT)"
+Default shut-down action, the same as used when CTRL+ALT+DEL is pressed
+on the keyboard.
 .TP
-.BI "reboot(RBT_REBOOT)"
-Reboot the system by letting the monitor execute the "boot" command.
+.BI "reboot(RBT_HALT)"
+Halt the system.
 .TP
 .BI "reboot(RBT_PANIC)"
 Cause a system panic.  This is not normally done from user mode, but by
@@ -30,16 +31,12 @@ servers using the
 .B sys_abort()
 kernel call.
 .TP
-.BI "reboot(RBT_MONITOR" ", code, length" ")"
-Halt the system and let the monitor execute the given code of the given
-length.
-.RI ( code
-is of type
-.B "char *"
-and
-.I length
-of type
-.BR size_t .)
+.BI "reboot(RBT_POWEROFF)"
+Power off the system if possible, reset otherwise.
+.TP
+.BI "reboot(RBT_REBOOT)"
+Reboot the system with a software reset (currently not supported, so
+a hardware reset is used).
 .TP
 .BI "reboot(RBT_RESET)"
 Reboot the system with a hardware reset.
@@ -55,8 +52,5 @@ the return value is -1 and an error is indicated by
 .BR reboot (8),
 .BR halt (8),
 .BR sync (2).
-.SH NOTES
-MINIX 3 can not return to the monitor if running in real mode.  This means
-that most of the reboot functions will change to a system reset.
 .SH AUTHOR
 Edvard Tuinder (v892231@si.hhs.NL)
index 691e2bfbebcf6fc8c13133e5180de7aad2f56320..ec532123d74ff417797410f0e635e2ced89b3329 100644 (file)
@@ -3,9 +3,7 @@
 shutdown \- graciously close the system down
 .SH SYNOPSIS
 .B shutdown
-.RB [ \-hrRmkd ]
-.RB [ \-x
-.IR code ]
+.RB [ \-hrRmkpd ]
 .RI [ time-specification
 .RI [ message ]]
 .SH DESCRIPTION
@@ -55,20 +53,16 @@ system can now be powered off.  This is the default.
 This flag indicates that the system should reboot after shutting down.
 .TP
 .B \-R
-Reboot the system by resetting it.  Normally the kernel will try to return
-to the Boot Monitor.  With
+Reboot the system by resetting it.  With
 .B \-R
 the system will receive a hardware reset.
 .TP
-.B \-d
-Default CTRL-ALT-DEL shutdown for current bootloader; drops to the boo
-monitor is possible and resets otherwise.
+.B \-p
+Attempt to power off the machine after shutting down; reset if tha
+is not possible on the current hardware.
 .TP
-.BI \-x " code"
-Halt the system and let the Monitor execute the given code as if typed at
-the monitor prompt.  You can for instance use
-.B "\-x 'boot hd0'"
-as a very fast way to reboot "from the top."
+.B \-d
+Default CTRL-ALT-DEL shutdown.
 .TP
 .B \-m
 Allows the operator to type a shutdown message on standard input, that will
index a4a2d97423b2a247be77840ab065c0af058e568e..a659ff11de29577bdc32a8d1136f1ccc4a3c4ef2 100644 (file)
@@ -27,8 +27,6 @@
 #define sig_how                m2_i1
 #define sig_context    m2_p1
 #define reboot_flag    m1_i1
-#define reboot_code    m1_p1
-#define reboot_strlen  m1_i2
 #define svrctl_req     m2_i1
 #define svrctl_argp    m2_p1
 #define stime          m2_l1