diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index de5d4b7c4f1..2cf8d5f5ac6 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.207 1996/10/05 10:44:03 jkh Exp $ + * $Id: machdep.c,v 1.208 1996/10/20 18:35:32 phk Exp $ */ #include "npx.h" @@ -689,6 +689,16 @@ cpu_boot(int howto) { } +/* + * Shutdown the CPU as much as possible + */ +void +cpu_halt(void) +{ + for (;;) + __asm__ ("hlt"); +} + /* * Clear registers on exec */ diff --git a/sys/amd64/include/md_var.h b/sys/amd64/include/md_var.h index b8faa151de6..c8752e339e6 100644 --- a/sys/amd64/include/md_var.h +++ b/sys/amd64/include/md_var.h @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: md_var.h,v 1.8 1996/03/02 19:37:45 peter Exp $ + * $Id: md_var.h,v 1.9 1996/07/01 18:12:24 bde Exp $ */ #ifndef _MACHINE_MD_VAR_H_ @@ -55,6 +55,7 @@ struct reg; void bcopyb __P((const void *from, void *to, size_t len)); void cpu_reset __P((void)); +void cpu_halt __P((void)); void doreti_iret __P((void)) __asm(__STRING(doreti_iret)); void doreti_iret_fault __P((void)) __asm(__STRING(doreti_iret_fault)); void doreti_popl_ds __P((void)) __asm(__STRING(doreti_popl_ds)); diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c index de5d4b7c4f1..2cf8d5f5ac6 100644 --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.207 1996/10/05 10:44:03 jkh Exp $ + * $Id: machdep.c,v 1.208 1996/10/20 18:35:32 phk Exp $ */ #include "npx.h" @@ -689,6 +689,16 @@ cpu_boot(int howto) { } +/* + * Shutdown the CPU as much as possible + */ +void +cpu_halt(void) +{ + for (;;) + __asm__ ("hlt"); +} + /* * Clear registers on exec */ diff --git a/sys/i386/include/md_var.h b/sys/i386/include/md_var.h index b8faa151de6..c8752e339e6 100644 --- a/sys/i386/include/md_var.h +++ b/sys/i386/include/md_var.h @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: md_var.h,v 1.8 1996/03/02 19:37:45 peter Exp $ + * $Id: md_var.h,v 1.9 1996/07/01 18:12:24 bde Exp $ */ #ifndef _MACHINE_MD_VAR_H_ @@ -55,6 +55,7 @@ struct reg; void bcopyb __P((const void *from, void *to, size_t len)); void cpu_reset __P((void)); +void cpu_halt __P((void)); void doreti_iret __P((void)) __asm(__STRING(doreti_iret)); void doreti_iret_fault __P((void)) __asm(__STRING(doreti_iret_fault)); void doreti_popl_ds __P((void)) __asm(__STRING(doreti_popl_ds)); diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c index 40d1d7403cd..11e395b8e95 100644 --- a/sys/kern/kern_shutdown.c +++ b/sys/kern/kern_shutdown.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)kern_shutdown.c 8.3 (Berkeley) 1/21/94 - * $Id: kern_shutdown.c,v 1.8 1996/09/14 04:31:01 bde Exp $ + * $Id: kern_shutdown.c,v 1.9 1996/10/30 21:40:22 julian Exp $ */ #include "opt_ddb.h" @@ -229,7 +229,13 @@ boot(howto) printf("\n"); printf("The operating system has halted.\n"); printf("Please press any key to reboot.\n\n"); - while (cngetc() == -1); /* no console, halt means STOP HERE */ + switch (cngetc()) { + case -1: /* No console, just die */ + cpu_halt(); + /* NOTREACHED */ + default: + break; + } } else { if (howto & RB_DUMP) { if (!cold) {