diff options
| author | Julian Elischer <julian@FreeBSD.org> | 2002-10-09 02:33:36 +0000 |
|---|---|---|
| committer | Julian Elischer <julian@FreeBSD.org> | 2002-10-09 02:33:36 +0000 |
| commit | 48bfcddd94bb965c037931abe94df44e96cf8340 (patch) | |
| tree | 93491b956e59fcfe0f873643838ff7944a49abe7 /sys/kern/kern_synch.c | |
| parent | 0ce3fbf1919e2061e757c99f8c924998d327b298 (diff) | |
Notes
Diffstat (limited to 'sys/kern/kern_synch.c')
| -rw-r--r-- | sys/kern/kern_synch.c | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c index 42d23bd5650f..b0f9d9297cbe 100644 --- a/sys/kern/kern_synch.c +++ b/sys/kern/kern_synch.c @@ -474,18 +474,16 @@ msleep(ident, mtx, priority, wmesg, timo) return (EINTR); if (td->td_mailbox && (!(td->td_flags & TDF_INMSLEEP))) { /* - * If we have no queued work to do, then - * upcall to the UTS to see if it has more to do. - * We don't need to upcall now, just make it and - * queue it. + * Arrange for an upcall to be readied. + * it will not actually happen until all + * pending in-kernel work for this KSEGRP + * has been done. */ mtx_lock_spin(&sched_lock); - if (TAILQ_FIRST(&td->td_ksegrp->kg_runq) == NULL) { - /* Don't recurse here! */ - td->td_flags |= TDF_INMSLEEP; - thread_schedule_upcall(td, td->td_kse); - td->td_flags &= ~TDF_INMSLEEP; - } + /* Don't recurse here! */ + td->td_flags |= TDF_INMSLEEP; + thread_schedule_upcall(td, td->td_kse); + td->td_flags &= ~TDF_INMSLEEP; mtx_unlock_spin(&sched_lock); } } @@ -818,23 +816,15 @@ mi_switch(void) * or stopped or any thing else similar. */ if (TD_IS_RUNNING(td)) { - KASSERT(((ke->ke_flags & KEF_IDLEKSE) == 0), - ("Idle thread in mi_switch with wrong state")); /* Put us back on the run queue (kse and all). */ setrunqueue(td); - } else if (td->td_flags & TDF_UNBOUND) { + } else if (p->p_flag & P_KSES) { /* * We will not be on the run queue. So we must be - * sleeping or similar. If it's available, + * sleeping or similar. As it's available, * someone else can use the KSE if they need it. - * XXXKSE KSE loaning will change this. + * (If bound LOANING can still occur). */ - td->td_kse = NULL; - kse_reassign(ke); - } else if (p->p_flag & P_KSES) { - KASSERT(((ke->ke_bound == NULL) || (ke->ke_bound == td)), - ("mi_switch: bad bound state")); - ke->ke_bound = td; kse_reassign(ke); } |
