637 if (p->p_rprof_cyclic == CYCLIC_NONE ||
638 (t = p->p_tlist) == NULL) {
639 mutex_exit(&p->p_lock);
640 return;
641 }
642 do {
643 int mstate;
644
645 /*
646 * Attempt to allocate the SIGPROF buffer, but don't sleep.
647 */
648 if (t->t_rprof == NULL)
649 t->t_rprof = kmem_zalloc(sizeof (struct rprof),
650 KM_NOSLEEP);
651 if (t->t_rprof == NULL)
652 continue;
653
654 thread_lock(t);
655 switch (t->t_state) {
656 case TS_SLEEP:
657 /*
658 * Don't touch the lwp is it is swapped out.
659 */
660 if (!(t->t_schedflag & TS_LOAD)) {
661 mstate = LMS_SLEEP;
662 break;
663 }
664 switch (mstate = ttolwp(t)->lwp_mstate.ms_prev) {
665 case LMS_TFAULT:
666 case LMS_DFAULT:
667 case LMS_KFAULT:
668 case LMS_USER_LOCK:
669 break;
670 default:
671 mstate = LMS_SLEEP;
672 break;
673 }
674 break;
675 case TS_RUN:
676 case TS_WAIT:
677 mstate = LMS_WAIT_CPU;
678 break;
679 case TS_ONPROC:
680 switch (mstate = t->t_mstate) {
681 case LMS_USER:
682 case LMS_SYSTEM:
683 case LMS_TRAP:
|
637 if (p->p_rprof_cyclic == CYCLIC_NONE ||
638 (t = p->p_tlist) == NULL) {
639 mutex_exit(&p->p_lock);
640 return;
641 }
642 do {
643 int mstate;
644
645 /*
646 * Attempt to allocate the SIGPROF buffer, but don't sleep.
647 */
648 if (t->t_rprof == NULL)
649 t->t_rprof = kmem_zalloc(sizeof (struct rprof),
650 KM_NOSLEEP);
651 if (t->t_rprof == NULL)
652 continue;
653
654 thread_lock(t);
655 switch (t->t_state) {
656 case TS_SLEEP:
657 switch (mstate = ttolwp(t)->lwp_mstate.ms_prev) {
658 case LMS_TFAULT:
659 case LMS_DFAULT:
660 case LMS_KFAULT:
661 case LMS_USER_LOCK:
662 break;
663 default:
664 mstate = LMS_SLEEP;
665 break;
666 }
667 break;
668 case TS_RUN:
669 case TS_WAIT:
670 mstate = LMS_WAIT_CPU;
671 break;
672 case TS_ONPROC:
673 switch (mstate = t->t_mstate) {
674 case LMS_USER:
675 case LMS_SYSTEM:
676 case LMS_TRAP:
|