Commit b62933ee authored by Tejun Heo's avatar Tejun Heo

sched/core: Make select_task_rq() take the pointer to wake_flags instead of value

This will be used to allow select_task_rq() to indicate whether
->select_task_rq() was called by modifying *wake_flags.

This makes try_to_wake_up() call all functions that take wake_flags with
WF_TTWU set. Previously, only select_task_rq() was. Using the same flags is
more consistent, and, as the flag is only tested by ->select_task_rq()
implementations, it doesn't cause any behavior differences.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Acked-by: default avatarDavid Vernet <void@manifault.com>
parent ec010333
...@@ -3518,12 +3518,12 @@ static int select_fallback_rq(int cpu, struct task_struct *p) ...@@ -3518,12 +3518,12 @@ static int select_fallback_rq(int cpu, struct task_struct *p)
* The caller (fork, wakeup) owns p->pi_lock, ->cpus_ptr is stable. * The caller (fork, wakeup) owns p->pi_lock, ->cpus_ptr is stable.
*/ */
static inline static inline
int select_task_rq(struct task_struct *p, int cpu, int wake_flags) int select_task_rq(struct task_struct *p, int cpu, int *wake_flags)
{ {
lockdep_assert_held(&p->pi_lock); lockdep_assert_held(&p->pi_lock);
if (p->nr_cpus_allowed > 1 && !is_migration_disabled(p)) if (p->nr_cpus_allowed > 1 && !is_migration_disabled(p))
cpu = p->sched_class->select_task_rq(p, cpu, wake_flags); cpu = p->sched_class->select_task_rq(p, cpu, *wake_flags);
else else
cpu = cpumask_any(p->cpus_ptr); cpu = cpumask_any(p->cpus_ptr);
...@@ -4120,6 +4120,8 @@ int try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) ...@@ -4120,6 +4120,8 @@ int try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags)
guard(preempt)(); guard(preempt)();
int cpu, success = 0; int cpu, success = 0;
wake_flags |= WF_TTWU;
if (p == current) { if (p == current) {
/* /*
* We're waking current, this means 'p->on_rq' and 'task_cpu(p) * We're waking current, this means 'p->on_rq' and 'task_cpu(p)
...@@ -4252,7 +4254,7 @@ int try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) ...@@ -4252,7 +4254,7 @@ int try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags)
*/ */
smp_cond_load_acquire(&p->on_cpu, !VAL); smp_cond_load_acquire(&p->on_cpu, !VAL);
cpu = select_task_rq(p, p->wake_cpu, wake_flags | WF_TTWU); cpu = select_task_rq(p, p->wake_cpu, &wake_flags);
if (task_cpu(p) != cpu) { if (task_cpu(p) != cpu) {
if (p->in_iowait) { if (p->in_iowait) {
delayacct_blkio_end(p); delayacct_blkio_end(p);
...@@ -4793,6 +4795,7 @@ void wake_up_new_task(struct task_struct *p) ...@@ -4793,6 +4795,7 @@ void wake_up_new_task(struct task_struct *p)
{ {
struct rq_flags rf; struct rq_flags rf;
struct rq *rq; struct rq *rq;
int wake_flags = WF_FORK;
raw_spin_lock_irqsave(&p->pi_lock, rf.flags); raw_spin_lock_irqsave(&p->pi_lock, rf.flags);
WRITE_ONCE(p->__state, TASK_RUNNING); WRITE_ONCE(p->__state, TASK_RUNNING);
...@@ -4807,7 +4810,7 @@ void wake_up_new_task(struct task_struct *p) ...@@ -4807,7 +4810,7 @@ void wake_up_new_task(struct task_struct *p)
*/ */
p->recent_used_cpu = task_cpu(p); p->recent_used_cpu = task_cpu(p);
rseq_migrate(p); rseq_migrate(p);
__set_task_cpu(p, select_task_rq(p, task_cpu(p), WF_FORK)); __set_task_cpu(p, select_task_rq(p, task_cpu(p), &wake_flags));
#endif #endif
rq = __task_rq_lock(p, &rf); rq = __task_rq_lock(p, &rf);
update_rq_clock(rq); update_rq_clock(rq);
...@@ -4815,7 +4818,7 @@ void wake_up_new_task(struct task_struct *p) ...@@ -4815,7 +4818,7 @@ void wake_up_new_task(struct task_struct *p)
activate_task(rq, p, ENQUEUE_NOCLOCK | ENQUEUE_INITIAL); activate_task(rq, p, ENQUEUE_NOCLOCK | ENQUEUE_INITIAL);
trace_sched_wakeup_new(p); trace_sched_wakeup_new(p);
wakeup_preempt(rq, p, WF_FORK); wakeup_preempt(rq, p, wake_flags);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
if (p->sched_class->task_woken) { if (p->sched_class->task_woken) {
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment