Index: sys/arch/arm/arm32/arm32_reboot.c =================================================================== RCS file: /cvsroot/src/sys/arch/arm/arm32/arm32_reboot.c,v retrieving revision 1.3 diff -u -p -u -r1.3 arm32_reboot.c --- sys/arch/arm/arm32/arm32_reboot.c 19 Jan 2013 10:22:25 -0000 1.3 +++ sys/arch/arm/arm32/arm32_reboot.c 20 Apr 2013 07:03:41 -0000 @@ -166,25 +166,32 @@ cpu_reboot(int howto, char *bootstr) if (!(howto & RB_NOSYNC)) bootsync(); - /* Say NO to interrupts */ - splhigh(); + /* Say NO to interrupts for the duration of the dump */ + int s = splhigh(); /* Do a dump if requested. */ if ((howto & (RB_DUMP | RB_HALT)) == RB_DUMP) dumpsys(); - /* Run any shutdown hooks */ - doshutdownhooks(); + splx(s); pmf_system_shutdown(boothowto); + /* Say NO to interrupts for good */ + splhigh(); + + /* Run any shutdown hooks */ + doshutdownhooks(); + /* Make sure IRQ's are disabled */ IRQdisable; if (howto & RB_HALT) { printf("The operating system has halted.\r\n"); printf("Please press any key to reboot.\r\n"); + cnpollc(true); /* for proper keyboard command handling */ cngetc(); + cnpollc(false); } printf("rebooting...\r\n");