KDB: restart only CPUs stopped by KDB

There is a case when not all CPUs went online. In that situation,
restart only APs which were operational before entering KDB.

Created by:            Wojciech Macek <wma@semihalf.com>
Obtained from:         Semihalf
Reviewed by:           nwhitehorn
Differential revision: https://reviews.freebsd.org/D13949
Sponsored by:          QCM Technologies
This commit is contained in:
Wojciech Macek 2018-01-18 07:38:54 +00:00
parent e70f868f17
commit 5b3e8b0725
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=328110

View File

@ -673,6 +673,7 @@ kdb_trap(int type, int code, struct trapframe *tf)
#ifdef SMP
if (!SCHEDULER_STOPPED()) {
other_cpus = all_cpus;
CPU_NAND(&other_cpus, &stopped_cpus);
CPU_CLR(PCPU_GET(cpuid), &other_cpus);
stop_cpus_hard(other_cpus);
did_stop_cpus = 1;
@ -707,8 +708,9 @@ kdb_trap(int type, int code, struct trapframe *tf)
kdb_active--;
#ifdef SMP
CPU_AND(&other_cpus, &stopped_cpus);
if (did_stop_cpus)
restart_cpus(stopped_cpus);
restart_cpus(other_cpus);
#endif
intr_restore(intr);