After sending the IPI to halt other CPUs, clear cpus_paused to ensure that

the other CPUs resume execution.  If the halt was initiated from DDB, the
CPUs will not have been resume execution and will never halt.  If one of the
paused CPUs is the primary CPU, the system will hang.  Fixes PR#26159.
This commit is contained in:
mhitch 2004-07-07 02:46:14 +00:00
parent fda6e12798
commit fcdbc29795
1 changed files with 5 additions and 2 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.282 2004/03/24 15:34:46 atatat Exp $ */
/* $NetBSD: machdep.c,v 1.283 2004/07/07 02:46:14 mhitch Exp $ */
/*-
* Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
@ -75,7 +75,7 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.282 2004/03/24 15:34:46 atatat Exp $");
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.283 2004/07/07 02:46:14 mhitch Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -1023,6 +1023,9 @@ cpu_reboot(howto, bootstr)
*/
alpha_broadcast_ipi(ALPHA_IPI_HALT);
/* Ensure any CPUs paused by DDB resume execution so they can halt */
cpus_paused = 0;
for (i = 0; i < 10000; i++) {
alpha_mb();
if (cpus_running == wait_mask)