diff options
Diffstat (limited to 'sys/kern/subr_smp.c')
| -rw-r--r-- | sys/kern/subr_smp.c | 15 | 
1 files changed, 11 insertions, 4 deletions
| diff --git a/sys/kern/subr_smp.c b/sys/kern/subr_smp.c index 1f9577fddf9c..9f5106316018 100644 --- a/sys/kern/subr_smp.c +++ b/sys/kern/subr_smp.c @@ -242,7 +242,7 @@ generic_stop_cpus(cpuset_t map, u_int type)  	KASSERT(  	    type == IPI_STOP || type == IPI_STOP_HARD  #if X86 -	    || type == IPI_SUSPEND +	    || type == IPI_SUSPEND || type == IPI_OFF  #endif  	    , ("%s: invalid stop type", __func__)); @@ -260,7 +260,7 @@ generic_stop_cpus(cpuset_t map, u_int type)  	 * will be lost, violating FreeBSD's assumption of reliable  	 * IPI delivery.  	 */ -	if (type == IPI_SUSPEND) +	if (type == IPI_SUSPEND || type == IPI_OFF)  		mtx_lock_spin(&smp_ipi_mtx);  #endif @@ -280,7 +280,7 @@ generic_stop_cpus(cpuset_t map, u_int type)  #endif  #if X86 -	if (type == IPI_SUSPEND) +	if (type == IPI_SUSPEND || type == IPI_OFF)  		cpus = &suspended_cpus;  	else  #endif @@ -298,7 +298,7 @@ generic_stop_cpus(cpuset_t map, u_int type)  	}  #if X86 -	if (type == IPI_SUSPEND) +	if (type == IPI_SUSPEND || type == IPI_OFF)  		mtx_unlock_spin(&smp_ipi_mtx);  #endif @@ -327,6 +327,13 @@ suspend_cpus(cpuset_t map)  	return (generic_stop_cpus(map, IPI_SUSPEND));  } + +int +offline_cpus(cpuset_t map) +{ + +	return (generic_stop_cpus(map, IPI_OFF)); +}  #endif  /* | 
