kernel/sched/core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Combine the task_on_rq_migrating() check and the sched_mm_cid_migrate_to()
invocation into a single conditional block. This removes a redundant flag
check and slightly reduces the instruction count in a hot path.
Signed-off-by: Zhongqiu Han <quic_zhonhan@quicinc.com>
---
- This is a slight optimization and code cleanup, please let me know if you'd prefer to keep the current structure.
- Thanks
kernel/sched/core.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 2343f5691c54..d6063cf503ee 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -2118,10 +2118,10 @@ inline bool dequeue_task(struct rq *rq, struct task_struct *p, int flags)
void activate_task(struct rq *rq, struct task_struct *p, int flags)
{
- if (task_on_rq_migrating(p))
+ if (task_on_rq_migrating(p)) {
flags |= ENQUEUE_MIGRATED;
- if (flags & ENQUEUE_MIGRATED)
sched_mm_cid_migrate_to(rq, p);
+ }
enqueue_task(rq, p, flags);
--
2.43.0
Hello Zhongqiu, On 7/24/2025 5:42 PM, Zhongqiu Han wrote: > Combine the task_on_rq_migrating() check and the sched_mm_cid_migrate_to() > invocation into a single conditional block. This removes a redundant flag > check and slightly reduces the instruction count in a hot path. > > Signed-off-by: Zhongqiu Han <quic_zhonhan@quicinc.com> > --- > - This is a slight optimization and code cleanup, please let me know if you'd prefer to keep the current structure. > - Thanks > > kernel/sched/core.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 2343f5691c54..d6063cf503ee 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -2118,10 +2118,10 @@ inline bool dequeue_task(struct rq *rq, struct task_struct *p, int flags) > > void activate_task(struct rq *rq, struct task_struct *p, int flags) > { > - if (task_on_rq_migrating(p)) > + if (task_on_rq_migrating(p)) { > flags |= ENQUEUE_MIGRATED; > - if (flags & ENQUEUE_MIGRATED) I think "ENQUEUE_MIGRATED" can be individually set without task_on_rq_migrating() in the wakeup path via ttwu_do_activate(). In that case "p->on_rq", goes from "0" to "TASK_ON_RQ_QUEUED" directly without going through an intermediate "TASK_ON_RQ_MIGRATING" but "ENQUEUE_MIGRATED" will be set if "p->task_cpu" was changed during wakeup. -- Thanks and Regards, Prateek > sched_mm_cid_migrate_to(rq, p); > + } > > enqueue_task(rq, p, flags); >
On 7/25/2025 3:14 PM, K Prateek Nayak wrote: > Hello Zhongqiu, > > On 7/24/2025 5:42 PM, Zhongqiu Han wrote: >> Combine the task_on_rq_migrating() check and the sched_mm_cid_migrate_to() >> invocation into a single conditional block. This removes a redundant flag >> check and slightly reduces the instruction count in a hot path. >> >> Signed-off-by: Zhongqiu Han <quic_zhonhan@quicinc.com> >> --- >> - This is a slight optimization and code cleanup, please let me know if you'd prefer to keep the current structure. >> - Thanks >> >> kernel/sched/core.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/kernel/sched/core.c b/kernel/sched/core.c >> index 2343f5691c54..d6063cf503ee 100644 >> --- a/kernel/sched/core.c >> +++ b/kernel/sched/core.c >> @@ -2118,10 +2118,10 @@ inline bool dequeue_task(struct rq *rq, struct task_struct *p, int flags) >> >> void activate_task(struct rq *rq, struct task_struct *p, int flags) >> { >> - if (task_on_rq_migrating(p)) >> + if (task_on_rq_migrating(p)) { >> flags |= ENQUEUE_MIGRATED; >> - if (flags & ENQUEUE_MIGRATED) > > I think "ENQUEUE_MIGRATED" can be individually set without > task_on_rq_migrating() in the wakeup path via ttwu_do_activate(). > > In that case "p->on_rq", goes from "0" to "TASK_ON_RQ_QUEUED" directly > without going through an intermediate "TASK_ON_RQ_MIGRATING" but > "ENQUEUE_MIGRATED" will be set if "p->task_cpu" was changed during > wakeup. > Hi Prateek You're right. Thanks for the nice review~ -- Thx and BRs, Zhongqiu Han
© 2016 - 2025 Red Hat, Inc.