Merge commit '1276d1e1a1b128f7093a3021d3f6bc27afa80d23' into amd64
[dragonfly.git] / sys / platform / pc64 / amd64 / trap.c
index e8ab454..31b8c02 100644 (file)
@@ -164,24 +164,6 @@ SYSCTL_INT(_kern, OID_AUTO, trap_mpsafe, CTLFLAG_RW,
 TUNABLE_INT("kern.trap_mpsafe", &trap_mpsafe);
 #endif
 
-
-
-/*
- * Passive USER->KERNEL transition.  This only occurs if we block in the
- * kernel while still holding our userland priority.  We have to fixup our
- * priority in order to avoid potential deadlocks before we allow the system
- * to switch us to another thread.
- */
-static void
-passive_release(struct thread *td)
-{
-       struct lwp *lp = td->td_lwp;
-
-       td->td_release = NULL;
-       lwkt_setpri_self(TDPRI_KERN_USER);
-       lp->lwp_proc->p_usched->release_curproc(lp);
-}
-
 /*
  * userenter() passively intercepts the thread switch function to increase
  * the thread priority from a user priority to a kernel priority, reducing
@@ -191,7 +173,7 @@ passive_release(struct thread *td)
 static __inline void
 userenter(struct thread *curtd)
 {
-       curtd->td_release = passive_release;
+       curtd->td_release = lwkt_passive_release;
 }
 
 /*
@@ -310,9 +292,7 @@ userexit(struct lwp *lp)
         * our passive release function was still in place, our priority was
         * never raised and does not need to be reduced.
         */
-       if (td->td_release == NULL)
-               lwkt_setpri_self(TDPRI_USER_NORM);
-       td->td_release = NULL;
+       lwkt_passive_recover(td);
 
        /*
         * Become the current user scheduled process if we aren't already,