]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Merge branch 'linus/master' into sched/core, to resolve conflict
authorPeter Zijlstra <peterz@infradead.org>
Tue, 28 Oct 2025 14:04:17 +0000 (15:04 +0100)
committerIngo Molnar <mingo@kernel.org>
Wed, 29 Oct 2025 07:42:28 +0000 (08:42 +0100)
Conflicts:
kernel/sched/ext.c

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
1  2 
kernel/sched/core.c
kernel/sched/deadline.c
kernel/sched/ext.c
kernel/sched/fair.c
kernel/sched/sched.h

Simple merge
Simple merge
index 49f4a9e763486cf5f5dc6da25abd4d28497a2b90,ecb251e883eab336f15a093354a04495ea256426..b063444dc003f93bfd14fad4020e53fd6800e0ce
@@@ -2298,22 -2368,41 +2332,23 @@@ static struct task_struct *first_local_
                                        struct task_struct, scx.dsq_list.node);
  }
  
 -static struct task_struct *pick_task_scx(struct rq *rq)
 +static struct task_struct *pick_task_scx(struct rq *rq, struct rq_flags *rf)
  {
        struct task_struct *prev = rq->curr;
 +      bool keep_prev, kick_idle = false;
        struct task_struct *p;
 -      bool keep_prev = rq->scx.flags & SCX_RQ_BAL_KEEP;
 -      bool kick_idle = false;
  
 -      /*
 -       * WORKAROUND:
 -       *
 -       * %SCX_RQ_BAL_KEEP should be set iff $prev is on SCX as it must just
 -       * have gone through balance_scx(). Unfortunately, there currently is a
 -       * bug where fair could say yes on balance() but no on pick_task(),
 -       * which then ends up calling pick_task_scx() without preceding
 -       * balance_scx().
 -       *
 -       * Keep running @prev if possible and avoid stalling from entering idle
 -       * without balancing.
 -       *
 -       * Once fair is fixed, remove the workaround and trigger WARN_ON_ONCE()
 -       * if pick_task_scx() is called without preceding balance_scx().
 -       */
 -      if (unlikely(rq->scx.flags & SCX_RQ_BAL_PENDING)) {
 -              if (prev->scx.flags & SCX_TASK_QUEUED) {
 -                      keep_prev = true;
 -              } else {
 -                      keep_prev = false;
 -                      kick_idle = true;
 -              }
 -      } else if (unlikely(keep_prev &&
 -                          prev->sched_class != &ext_sched_class)) {
 -              /*
 -               * Can happen while enabling as SCX_RQ_BAL_PENDING assertion is
 -               * conditional on scx_enabled() and may have been skipped.
 -               */
 +      rq_modified_clear(rq);
 +      rq_unpin_lock(rq, rf);
 +      balance_one(rq, prev);
 +      rq_repin_lock(rq, rf);
++      maybe_queue_balance_callback(rq);
 +      if (rq_modified_above(rq, &ext_sched_class))
 +              return RETRY_TASK;
 +
 +      keep_prev = rq->scx.flags & SCX_RQ_BAL_KEEP;
 +      if (unlikely(keep_prev &&
 +                   prev->sched_class != &ext_sched_class)) {
                WARN_ON_ONCE(scx_enable_state() == SCX_ENABLED);
                keep_prev = false;
        }
Simple merge
Simple merge