unbypass_renotify_idle(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… unbypass_renotify_idle πŸ’…

okay bestie, welcome to the unbypass_renotify_idle(9) page β€” yes it's a kernel API manual joint and yes it's kind of a banger πŸŽ€


🌸 NAME 🌸

unbypass_renotify_idle β€” arm an idle re-notify for a sched leaving bypass ✨


πŸŽ€ SYNOPSIS πŸŽ€

void unbypass_renotify_idle (struct rq *rq , struct scx_sched *pos ,
struct scx_sched_pcpu *pcpu );

πŸ¦‹ ARGUMENTS πŸ¦‹

  • rq β€” the rq of the cpu that's leaving bypass, iykyk 🫢
  • pos β€” the scheduler that just left bypass on rq's cpu, main character was just here
  • pcpu β€” pos's per-cpu state for rq's cpu, its own little vibe corner πŸ’œ

πŸ”₯ DESCRIPTION πŸ”₯

okay so here's the tea β˜• a sched leaving bypass is owed the ops.update_idle calls that got suppressed while it was bypassing. like, it didn't get the notifications, bestie, and it's owed them.

and here's the problem: a cpu that goes idle during the bypass window and then just stays idle won't produce a notification at all 😭 nothing happens. so what we do is arm a re-notify β€” one that scx_bypass's resched flushes on the next idle pick. literally the save πŸ’…


an acute case is ops.sub_attach. the way that works: if the parent grants the child cids while attaching, then when attach is complete and bypass is lifted, the child may be holding idle cids it never saw go idle πŸ™ˆ like it inherited cids with zero memory of them going idle. wild.


and the root is no exception β€” bypass suppresses its notifications the exact same way, no cap. however 🫢 the root uses a separate per-rq flag, so its re-notify keeps working even when !CONFIG_EXT_SUB_SCHED. that's the whole point of the flag, iconic behavior honestly πŸ‘‘


⭐ SEE ALSO ⭐

kernel file ./kernel/sched/ext/ext.c (scx_is_descendant(9), rq_is_open(9), scx_fill_cmask_scratch(9), scx_call_op_set_cpumask(9), nldsq_next_task(9), nldsq_cursor_next_task(9), nldsq_cursor_lost_task(9), scx_task_iter_start(9), scx_task_iter_unlock(9), scx_task_iter_relock(9), scx_task_iter_stop(9), scx_task_iter_next(9), scx_task_iter_next_locked(9), scx_dump_event(9), wait_ops_state(9), scx_cpu_valid(9), schedule_deferred(9), schedule_deferred_locked(9), dsq_insert_head(9), set_task_slice_keep_oob(9), scx_task_slice_ended(9), move_remote_task_to_local_dsq(9), unlink_dsq_and_switch_rq_lock(9), move_task_between_dsqs(9), dispatch_to_local_dsq(9), finish_dispatch(9), scx_prio_less(9), __scx_init_task(9), task_dead_and_done(9), scx_tg_sched(9), scx_tg_knob_sched(9), handle_lockup(9), scx_rcu_cpu_stall(9), scx_softlockup(9), scx_hardlockup(9), scx_bypass(9), scx_propagate_exit_irq_workfn(9), scx_flush_disable_work(9), print_scx_info(9), scx_bpf_dsq_insert___v2(9), __scx_bpf_dsq_insert_vtime(9), scx_bpf_dispatch_nr_slots(9), scx_bpf_dispatch_cancel(9), scx_bpf_dsq_move_to_local___v2(9), scx_bpf_dsq_move_set_slice(9), scx_bpf_dsq_move_set_vtime(9), scx_bpf_dsq_move(9), scx_bpf_dsq_move_vtime(9), scx_bpf_reenqueue_local(9), scx_bpf_create_dsq(9), scx_bpf_task_set_slice(9), scx_bpf_task_set_dsq_vtime(9), scx_bpf_kick_cpu(9), scx_bpf_kick_cid(9), scx_bpf_dsq_nr_queued(9), scx_bpf_destroy_dsq(9), bpf_iter_scx_dsq_new(9), bpf_iter_scx_dsq_next(9), bpf_iter_scx_dsq_destroy(9), scx_bpf_dsq_peek(9), scx_bpf_dsq_reenq(9), scx_bpf_reenqueue_local___v2(9), scx_bpf_exit_bstr(9), scx_bpf_error_bstr(9), scx_bpf_dump_bstr(9), scx_bpf_cpuperf_cap(9), scx_bpf_cidperf_cap(9), scx_bpf_cpuperf_cur(9), scx_bpf_cidperf_cur(9), scx_bpf_cpuperf_set(9), scx_bpf_cidperf_set(9), scx_bpf_nr_node_ids(9), scx_bpf_nr_cpu_ids(9), scx_bpf_nr_cids(9), scx_bpf_nr_online_cids(9), scx_bpf_online_cmask(9), scx_bpf_this_cid(9), scx_bpf_get_possible_cpumask(9), scx_bpf_get_online_cpumask(9), scx_bpf_put_cpumask(9), scx_bpf_task_running(9), scx_bpf_task_cpu(9), scx_bpf_task_cid(9), scx_bpf_locked_rq(9), scx_bpf_cpu_curr(9), scx_bpf_cid_curr(9), scx_bpf_tid_to_task(9), scx_bpf_now(9), scx_bpf_events(9), scx_bpf_task_cgroup(9))

like, go read some of those, they're all literally right there πŸ’–


fr fr though β€” read the actual source before you poke at bypass behavior. this page is the vibe, ./kernel/sched/ext/ext.c is the truth 🧚

and that's the whole page, bestie πŸ“ straight out of ./kernel/sched/ext (section 9, kernel API manual), dated October 2026 β€” slay, go forth and arm your re-notifies πŸ’…βœ¨πŸ¦‹

πŸ“¦ where this page comes from