Pull scheduler fix from Ingo Molnar: "This is a revert to fix an interactivity problem. The proper fixes for the problems that the reverted commit exposed are now in sched/core (consisting of 3 patches), but were too risky for v4.6 and will arrive in the v4.7 merge window" * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: Revert "sched/fair: Fix fairness issue on migration"
Unified · Split
| @@ -3188,25 +3188,17 @@ static inline void check_schedstat_required(void) · 3187 unmodified lines | ||
| 3188 | 3188 | static void |
| 3189 | 3189 | enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) |
| 3190 | 3190 | { |
| 3191 | − bool renorm = !(flags & ENQUEUE_WAKEUP) || (flags & ENQUEUE_WAKING); | |
| 3192 | − bool curr = cfs_rq->curr == se; | |
| 3193 | − | |
| 3194 | 3191 | /* |
| 3195 | − * If we're the current task, we must renormalise before calling | |
| 3196 | − * update_curr(). | |
| 3192 | + * Update the normalized vruntime before updating min_vruntime | |
| 3193 | + * through calling update_curr(). | |
| 3197 | 3194 | */ |
| 3198 | − if (renorm && curr) | |
| 3195 | + if (!(flags & ENQUEUE_WAKEUP) || (flags & ENQUEUE_WAKING)) | |
| 3199 | 3196 | se->vruntime += cfs_rq->min_vruntime; |
| 3200 | 3197 | |
| 3201 | − update_curr(cfs_rq); | |
| 3202 | − | |
| 3203 | 3198 | /* |
| 3204 | − * Otherwise, renormalise after, such that we're placed at the current | |
| 3205 | − * moment in time, instead of some random moment in the past. | |
| 3199 | + * Update run-time statistics of the 'current'. | |
| 3206 | 3200 | */ |
| 3207 | − if (renorm && !curr) | |
| 3208 | − se->vruntime += cfs_rq->min_vruntime; | |
| 3209 | − | |
| 3201 | + update_curr(cfs_rq); | |
| 3210 | 3202 | enqueue_entity_load_avg(cfs_rq, se); |
| 3211 | 3203 | account_entity_enqueue(cfs_rq, se); |
| 3212 | 3204 | update_cfs_shares(cfs_rq); |
| @@ -3222,7 +3214,7 @@ enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) · 9 unmodified lines | ||
| 3222 | 3214 | update_stats_enqueue(cfs_rq, se); |
| 3223 | 3215 | check_spread(cfs_rq, se); |
| 3224 | 3216 | } |
| 3225 | − if (!curr) | |
| 3217 | + if (se != cfs_rq->curr) | |
| 3226 | 3218 | __enqueue_entity(cfs_rq, se); |
| 3227 | 3219 | se->on_rq = 1; |
| 3228 | 3220 | |