@@ -3126,7 +3126,7 @@ static int select_task_rq_scx(struct task_struct *p, int prev_cpu, int wake_flag
3126
3126
if (unlikely (wake_flags & WF_EXEC ))
3127
3127
return prev_cpu ;
3128
3128
3129
- if (SCX_HAS_OP (select_cpu )) {
3129
+ if (SCX_HAS_OP (select_cpu ) && ! scx_rq_bypassing ( task_rq ( p )) ) {
3130
3130
s32 cpu ;
3131
3131
struct task_struct * * ddsp_taskp ;
3132
3132
@@ -3191,7 +3191,7 @@ void __scx_update_idle(struct rq *rq, bool idle)
3191
3191
{
3192
3192
int cpu = cpu_of (rq );
3193
3193
3194
- if (SCX_HAS_OP (update_idle )) {
3194
+ if (SCX_HAS_OP (update_idle ) && ! scx_rq_bypassing ( rq ) ) {
3195
3195
SCX_CALL_OP (SCX_KF_REST , update_idle , cpu_of (rq ), idle );
3196
3196
if (!static_branch_unlikely (& scx_builtin_idle_enabled ))
3197
3197
return ;
@@ -4254,21 +4254,23 @@ bool task_should_scx(struct task_struct *p)
4254
4254
* the DISABLING state and then cycling the queued tasks through dequeue/enqueue
4255
4255
* to force global FIFO scheduling.
4256
4256
*
4257
- * a. ops.enqueue() is ignored and tasks are queued in simple global FIFO order.
4258
- * %SCX_OPS_ENQ_LAST is also ignored.
4257
+ * - ops.select_cpu() is ignored and the default select_cpu() is used.
4259
4258
*
4260
- * b. ops.dispatch() is ignored.
4259
+ * - ops.enqueue() is ignored and tasks are queued in simple global FIFO order.
4260
+ * %SCX_OPS_ENQ_LAST is also ignored.
4261
4261
*
4262
- * c. balance_scx() does not set %SCX_RQ_BAL_KEEP on non-zero slice as slice
4263
- * can't be trusted. Whenever a tick triggers, the running task is rotated to
4264
- * the tail of the queue with core_sched_at touched.
4262
+ * - ops.dispatch() is ignored.
4265
4263
*
4266
- * d. pick_next_task() suppresses zero slice warning.
4264
+ * - balance_scx() does not set %SCX_RQ_BAL_KEEP on non-zero slice as slice
4265
+ * can't be trusted. Whenever a tick triggers, the running task is rotated to
4266
+ * the tail of the queue with core_sched_at touched.
4267
4267
*
4268
- * e. scx_bpf_kick_cpu() is disabled to avoid irq_work malfunction during PM
4269
- * operations.
4268
+ * - pick_next_task() suppresses zero slice warning.
4270
4269
*
4271
- * f. scx_prio_less() reverts to the default core_sched_at order.
4270
+ * - scx_bpf_kick_cpu() is disabled to avoid irq_work malfunction during PM
4271
+ * operations.
4272
+ *
4273
+ * - scx_prio_less() reverts to the default core_sched_at order.
4272
4274
*/
4273
4275
static void scx_ops_bypass (bool bypass )
4274
4276
{
@@ -4338,7 +4340,7 @@ static void scx_ops_bypass(bool bypass)
4338
4340
4339
4341
rq_unlock_irqrestore (rq , & rf );
4340
4342
4341
- /* kick to restore ticks */
4343
+ /* resched to restore ticks and idle state */
4342
4344
resched_cpu (cpu );
4343
4345
}
4344
4346
}
0 commit comments