diff options
| author | Ingo Molnar <mingo@kernel.org> | 2025-03-08 00:54:06 +0100 | 
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2025-03-08 00:54:06 +0100 | 
| commit | f23ecef20af6fbd489e0362d33cdf8d9429fa901 (patch) | |
| tree | 713f06d8335b7c3388bbfbc46cb6d2a568951252 /kernel/sched/ext.c | |
| parent | c929d08df8bee855528b9d15b853c892c54e1eee (diff) | |
| parent | 85b2b9c16d053364e2004883140538e73b333cdb (diff) | |
Merge branch 'locking/urgent' into locking/core, to pick up locking fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/sched/ext.c')
| -rw-r--r-- | kernel/sched/ext.c | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c index 5a81d9a1e31f..0f1da199cfc7 100644 --- a/kernel/sched/ext.c +++ b/kernel/sched/ext.c @@ -3117,7 +3117,6 @@ static struct task_struct *pick_task_scx(struct rq *rq)  {  	struct task_struct *prev = rq->curr;  	struct task_struct *p; -	bool prev_on_scx = prev->sched_class == &ext_sched_class;  	bool keep_prev = rq->scx.flags & SCX_RQ_BAL_KEEP;  	bool kick_idle = false; @@ -3137,14 +3136,18 @@ static struct task_struct *pick_task_scx(struct rq *rq)  	 * if pick_task_scx() is called without preceding balance_scx().  	 */  	if (unlikely(rq->scx.flags & SCX_RQ_BAL_PENDING)) { -		if (prev_on_scx) { +		if (prev->scx.flags & SCX_TASK_QUEUED) {  			keep_prev = true;  		} else {  			keep_prev = false;  			kick_idle = true;  		} -	} else if (unlikely(keep_prev && !prev_on_scx)) { -		/* only allowed during transitions */ +	} 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. +		 */  		WARN_ON_ONCE(scx_ops_enable_state() == SCX_OPS_ENABLED);  		keep_prev = false;  	}  | 
