Index: sched_ule.c =================================================================== RCS file: /home/ncvs/src/sys/kern/sched_ule.c,v retrieving revision 1.202 diff -u -r1.202 sched_ule.c --- sched_ule.c 19 Jul 2007 20:03:15 -0000 1.202 +++ sched_ule.c 3 Aug 2007 04:21:10 -0000 @@ -389,7 +389,7 @@ * This queue contains only priorities between MIN and MAX * realtime. Use the whole queue to represent these values. */ - if ((flags & SRQ_BORROWING) == 0) { + if ((flags & (SRQ_BORROWING|SRQ_PREEMPTED)) == 0) { pri = (pri - PRI_MIN_TIMESHARE) / TS_RQ_PPQ; pri = (pri + tdq->tdq_idx) % RQ_NQS; /* Index: kern_switch.c =================================================================== RCS file: /home/ncvs/src/sys/kern/kern_switch.c,v retrieving revision 1.132 diff -u -r1.132 kern_switch.c --- kern_switch.c 19 Jul 2007 08:58:40 -0000 1.132 +++ kern_switch.c 3 Aug 2007 04:19:53 -0000 @@ -192,7 +192,7 @@ thread_lock(td); td->td_critnest--; SCHED_STAT_INC(switch_owepreempt); - mi_switch(SW_INVOL, NULL); + mi_switch(SW_INVOL|SW_PREEMPT, NULL); thread_unlock(td); } } else