aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/sched.h1
-rw-r--r--kernel/sched.c2
-rw-r--r--kernel/sched_fair.c2
3 files changed, 3 insertions, 2 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 3b07168b6f03..ee1f88993097 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1028,6 +1028,7 @@ struct sched_domain;
1028 * wake flags 1028 * wake flags
1029 */ 1029 */
1030#define WF_SYNC 0x01 /* waker goes to sleep after wakup */ 1030#define WF_SYNC 0x01 /* waker goes to sleep after wakup */
1031#define WF_FORK 0x02 /* child wakeup after fork */
1031 1032
1032struct sched_class { 1033struct sched_class {
1033 const struct sched_class *next; 1034 const struct sched_class *next;
diff --git a/kernel/sched.c b/kernel/sched.c
index 4da335cec8ee..0d4c4fea3317 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -2602,7 +2602,7 @@ void wake_up_new_task(struct task_struct *p, unsigned long clone_flags)
2602 inc_nr_running(rq); 2602 inc_nr_running(rq);
2603 } 2603 }
2604 trace_sched_wakeup_new(rq, p, 1); 2604 trace_sched_wakeup_new(rq, p, 1);
2605 check_preempt_curr(rq, p, 0); 2605 check_preempt_curr(rq, p, WF_FORK);
2606#ifdef CONFIG_SMP 2606#ifdef CONFIG_SMP
2607 if (p->sched_class->task_wake_up) 2607 if (p->sched_class->task_wake_up)
2608 p->sched_class->task_wake_up(rq, p); 2608 p->sched_class->task_wake_up(rq, p);
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index 007958e3c93a..6766959c7f44 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -1580,7 +1580,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int flags
1580 */ 1580 */
1581 if (sched_feat(LAST_BUDDY) && likely(se->on_rq && curr != rq->idle)) 1581 if (sched_feat(LAST_BUDDY) && likely(se->on_rq && curr != rq->idle))
1582 set_last_buddy(se); 1582 set_last_buddy(se);
1583 if (sched_feat(NEXT_BUDDY)) 1583 if (sched_feat(NEXT_BUDDY) && !(flags & WF_FORK))
1584 set_next_buddy(pse); 1584 set_next_buddy(pse);
1585 1585
1586 /* 1586 /*