Index: sys/i386/i386/mp_machdep.c =================================================================== --- sys/i386/i386/mp_machdep.c (revision 211149) +++ sys/i386/i386/mp_machdep.c (working copy) @@ -1411,8 +1411,10 @@ cpumask_t cpumask; u_int cpu; + sched_pin(); cpu = PCPU_GET(cpuid); cpumask = PCPU_GET(cpumask); + sched_unpin(); savectx(&stoppcbs[cpu]); @@ -1586,10 +1588,14 @@ #endif int retval; +#ifdef MP_WATCHDOG + sched_pin(); mask = PCPU_GET(cpumask); -#ifdef MP_WATCHDOG cpuid = PCPU_GET(cpuid); + sched_unpin(); ap_watchdog(cpuid); +#else + mask = PCPU_GET(cpumask); #endif retval = mask & hlt_cpus_mask; Index: sys/amd64/amd64/mp_machdep.c =================================================================== --- sys/amd64/amd64/mp_machdep.c (revision 211149) +++ sys/amd64/amd64/mp_machdep.c (working copy) @@ -1324,8 +1324,10 @@ cpumask_t cpumask; u_int cpu; + sched_pin(); cpu = PCPU_GET(cpuid); cpumask = PCPU_GET(cpumask); + sched_unpin(); savectx(&stoppcbs[cpu]); @@ -1356,8 +1358,10 @@ register_t cr3, rf; u_int cpu; + sched_pin(); cpu = PCPU_GET(cpuid); cpumask = PCPU_GET(cpumask); + sched_unpin(); rf = intr_disable(); cr3 = rcr3(); @@ -1535,10 +1539,14 @@ #endif int retval; +#ifdef MP_WATCHDOG + sched_pin(); mask = PCPU_GET(cpumask); -#ifdef MP_WATCHDOG cpuid = PCPU_GET(cpuid); + sched_unpin(); ap_watchdog(cpuid); +#else + mask = PCPU_GET(cpumask); #endif retval = mask & hlt_cpus_mask;