/* * sleepq_insert: * * Insert an LWP into the sleep queue, optionally sorting by priority. */ static void sleepq_insert(sleepq_t *sq, lwp_t *l, syncobj_t *sobj) { if ((sobj->sobj_flag & SOBJ_SLEEPQ_SORTED) != 0) { lwp_t *l2; const int pri = lwp_eprio(l); TAILQ_FOREACH(l2, sq, l_sleepchain) { if (lwp_eprio(l2) < pri) { TAILQ_INSERT_BEFORE(l2, l, l_sleepchain); return; } } }
void db_proc_cmd(db_expr_t addr, bool have_addr, db_expr_t count, const char *modif) { struct lwp *l; struct proc *p; l = curlwp; if (have_addr) l = (struct lwp *) addr; if (l == NULL) { db_printf("no current process\n"); return; } p = l->l_proc; db_printf("LWP %p: ", l); db_printf("PID:%d.%d CPU:%d stat:%d vmspace:%p", p->p_pid, l->l_lid, l->l_cpu->ci_cpuid, l->l_stat, p->p_vmspace); if (!P_ZOMBIE(p)) db_printf(" ctx: %p cpuset %x", p->p_vmspace->vm_map.pmap->pm_ctx, p->p_vmspace->vm_map.pmap->pm_cpuset); db_printf("\npmap:%p wchan:%p pri:%d epri:%d\n", p->p_vmspace->vm_map.pmap, l->l_wchan, l->l_priority, lwp_eprio(l)); db_printf("maxsaddr:%p ssiz:%d pg or %llxB\n", p->p_vmspace->vm_maxsaddr, p->p_vmspace->vm_ssize, (unsigned long long)ctob(p->p_vmspace->vm_ssize)); db_printf("profile timer: %lld sec %ld nsec\n", p->p_stats->p_timer[ITIMER_PROF].it_value.tv_sec, p->p_stats->p_timer[ITIMER_PROF].it_value.tv_nsec); db_printf("pcb: %p\n", lwp_getpcb(l)); return; }