344 CPU_SIGNATURE(OS_SIG, SIGST_EXIT, SIGSUBST_REBOOT, -1);
345 prom_reboot(bootstr);
346 /*NOTREACHED*/
347 }
348
349 /*
350 * We use the x-trap mechanism and idle_stop_xcall() to stop the other CPUs.
351 * Once in panic_idle() they raise spl, record their location, and spin.
352 */
353 static void
354 panic_idle(void)
355 {
356 (void) spl7();
357
358 debug_flush_windows();
359 (void) setjmp(&curthread->t_pcb);
360
361 CPU->cpu_m.in_prom = 1;
362 membar_stld();
363
364 dumpsys_helper();
365
366 for (;;)
367 ;
368 }
369
370 /*
371 * Force the other CPUs to trap into panic_idle(), and then remove them
372 * from the cpu_ready_set so they will no longer receive cross-calls.
373 */
374 /*ARGSUSED*/
375 void
376 panic_stopcpus(cpu_t *cp, kthread_t *t, int spl)
377 {
378 cpuset_t cps;
379 int i;
380
381 (void) splzs();
382 CPUSET_ALL_BUT(cps, cp->cpu_id);
383 xt_some(cps, (xcfunc_t *)idle_stop_xcall, (uint64_t)&panic_idle, NULL);
384
385 for (i = 0; i < NCPU; i++) {
|
344 CPU_SIGNATURE(OS_SIG, SIGST_EXIT, SIGSUBST_REBOOT, -1);
345 prom_reboot(bootstr);
346 /*NOTREACHED*/
347 }
348
349 /*
350 * We use the x-trap mechanism and idle_stop_xcall() to stop the other CPUs.
351 * Once in panic_idle() they raise spl, record their location, and spin.
352 */
353 static void
354 panic_idle(void)
355 {
356 (void) spl7();
357
358 debug_flush_windows();
359 (void) setjmp(&curthread->t_pcb);
360
361 CPU->cpu_m.in_prom = 1;
362 membar_stld();
363
364 for (;;)
365 ;
366 }
367
368 /*
369 * Force the other CPUs to trap into panic_idle(), and then remove them
370 * from the cpu_ready_set so they will no longer receive cross-calls.
371 */
372 /*ARGSUSED*/
373 void
374 panic_stopcpus(cpu_t *cp, kthread_t *t, int spl)
375 {
376 cpuset_t cps;
377 int i;
378
379 (void) splzs();
380 CPUSET_ALL_BUT(cps, cp->cpu_id);
381 xt_some(cps, (xcfunc_t *)idle_stop_xcall, (uint64_t)&panic_idle, NULL);
382
383 for (i = 0; i < NCPU; i++) {
|