216 /*NOTREACHED*/
217 }
218
219 /*
220 * We use the x-trap mechanism and idle_stop_xcall() to stop the other CPUs.
221 * Once in panic_idle() they raise spl, record their location, and spin.
222 */
223 static void
224 panic_idle(void)
225 {
226 cpu_async_panic_callb(); /* check for async errors */
227
228 (void) spl7();
229
230 debug_flush_windows();
231 (void) setjmp(&curthread->t_pcb);
232
233 CPU->cpu_m.in_prom = 1;
234 membar_stld();
235
236 dumpsys_helper();
237
238 for (;;)
239 continue;
240 }
241
242 /*
243 * Force the other CPUs to trap into panic_idle(), and then remove them
244 * from the cpu_ready_set so they will no longer receive cross-calls.
245 */
246 /*ARGSUSED*/
247 void
248 panic_stopcpus(cpu_t *cp, kthread_t *t, int spl)
249 {
250 cpuset_t cps;
251 int i;
252
253 (void) splzs();
254 CPUSET_ALL_BUT(cps, cp->cpu_id);
255 xt_some(cps, (xcfunc_t *)idle_stop_xcall, (uint64_t)&panic_idle, NULL);
256
257 for (i = 0; i < NCPU; i++) {
|
216 /*NOTREACHED*/
217 }
218
219 /*
220 * We use the x-trap mechanism and idle_stop_xcall() to stop the other CPUs.
221 * Once in panic_idle() they raise spl, record their location, and spin.
222 */
223 static void
224 panic_idle(void)
225 {
226 cpu_async_panic_callb(); /* check for async errors */
227
228 (void) spl7();
229
230 debug_flush_windows();
231 (void) setjmp(&curthread->t_pcb);
232
233 CPU->cpu_m.in_prom = 1;
234 membar_stld();
235
236 for (;;)
237 continue;
238 }
239
240 /*
241 * Force the other CPUs to trap into panic_idle(), and then remove them
242 * from the cpu_ready_set so they will no longer receive cross-calls.
243 */
244 /*ARGSUSED*/
245 void
246 panic_stopcpus(cpu_t *cp, kthread_t *t, int spl)
247 {
248 cpuset_t cps;
249 int i;
250
251 (void) splzs();
252 CPUSET_ALL_BUT(cps, cp->cpu_id);
253 xt_some(cps, (xcfunc_t *)idle_stop_xcall, (uint64_t)&panic_idle, NULL);
254
255 for (i = 0; i < NCPU; i++) {
|