Messages in this thread | | | Date | Thu, 20 Jan 2011 17:07:17 +0800 | Subject | Re: Bug in scheduler when using rt_mutex | From | Yong Zhang <> |
| |
On Thu, Jan 20, 2011 at 4:37 PM, Mike Galbraith <efault@gmx.de> wrote: > On Thu, 2011-01-20 at 15:06 +0800, Yong Zhang wrote: >> On Thu, Jan 20, 2011 at 2:12 PM, Mike Galbraith <efault@gmx.de> wrote: >> > If the task returns as a sleeper, place entity() will be called when it >> > is awakened, so it's sleep credit will be clipped as usual. So vruntime >> > can be much less than min_vruntime at class exit time, and it doesn't >> > matter, clipping on wakeup after re-entry takes care of it.. if that's >> > what you were thinking about. >> >> For a sleep task which stay in sched_fair before it's waked: >> try_to_wake_up() >> ttwu_activate() >> activate_task() >> enqueue_task_fair() >> enqueue_entity() >> place_entity() <== clip vruntime >> >> For a sleep task which promote to sched_rt when it's sleep: >> rt_mutex_setprio() >> check_class_changed() >> switch_from_fair() <== vruntime -= min_vruntime >> try_to_wake_up() >> ...run then stay on rq >> rt_mutex_setprio() >> enqueue_task_fair() <==vruntime += min_vruntime >> >> The difference is that in the second case, place_entity() is not >> called, but wrt sched_fair, the task is a WAKEUP task. >> Then we place this task in sched_fair before where it should be. > > D'oh. You're right, he needs to be clipped before he leaves.
Exactly we should clip it when it comes back, because it still could sleep for some time after it leaves ;)
Thanks, Yong
-- Only stand for myself -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |