• Peter Williams's avatar
    [PATCH] sched: fix bug in __migrate_task() · 0a565f79
    Peter Williams authored
    Problem:
    
    In the function __migrate_task(), deactivate_task() followed by
    activate_task() is used to move the task from one run queue to
    another.  This has two undesirable effects:
    
    1. The task's priority is recalculated. (Nowhere else in the
    scheduler code is the priority recalculated for a change of CPU.)
    
    2. The task's time stamp is set to the current time.  At the very least,
    this makes the adjustment of the time stamp before the call to
    deactivate_task() redundant but I believe the problem is more serious
    as the time stamp now holds the time of the queue change instead of
    the time at which the task was woken.  In addition, unless dest_rq is
    the same queue as "current" is on the time stamp could be inaccurate
    due to inter CPU drift.
    
    Solution:
    
    Replace the call to activate_task() with one to __activate_task().
    Signed-off-by: default avatarPeter Williams <pwil3058@bigpond.net.au>
    Cc: Ingo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    0a565f79
sched.c 171 KB