[GIT PULL] sched_ext: Fixes for v7.2-rc6
sched_ext 为 v7.2-rc6 提交了四类 bugfix:子调度器 enable 失败路径的 use-after-free、cgroup/kernfs 锁序死锁、WAKE_SYNC 场景下 waker CPU 空闲标记错误,以及 numa 自测对睡眠任务 affinity 变化的处理。这些修复已由 pr-tracker-bot 合并进 torvalds/linux.git。
北京时间全部历史数据
最近同步:2026/08/28 15:52
sched_ext 为 v7.2-rc6 提交了四类 bugfix:子调度器 enable 失败路径的 use-after-free、cgroup/kernfs 锁序死锁、WAKE_SYNC 场景下 waker CPU 空闲标记错误,以及 numa 自测对睡眠任务 affinity 变化的处理。这些修复已由 pr-tracker-bot 合并进 torvalds/linux.git。
sched_ext 内置 idle mask 在 scheduler 启用时将所有 online CPU 标记为 idle,导致 busy CPU 被误报。v4 改为空初始化,依赖 bypass re-notification 路径填充真正 idle 的 CPU。同时重构 allowed_cpus selftest,用稳定的本地不变量替代竞态的远端 CPU 检查。已合入 for-7.3。
sched_ext 内置 idle mask 在调度器完全启用前将所有 online CPU 标记为 idle,导致 ops.init() 看到错误状态。本系列在 ops.init() 之前启用 idle 追踪并逐 CPU 刷新真实状态,同时将 allowed_cpus 自测从竞态的远程检查改为稳定的本地不变量验证。Tejun 提出了更简洁的替代方案(清空而非设置 idle bit),值得后续跟进。
scx_root_enable_workfn() 在 ENABLING→ENABLED cmpxchg 失败时跳转 err_disable,但未设置 ret,导致错误日志输出 failed (0) 无意义。本 patch 在跳转前补设 ret=-EBUSY,与函数顶部其他状态守卫一致。已被 Tejun Heo 合入 sched_ext/for-7.3。
本系列为 sched_ext 子调度器中因 CPU 亲和性与 cid 不匹配而搁浅的任务,新增内核侧的带宽受限救援执行机制。调度器在 insert 时标记 SCX_ENQ_RESCUE,内核将任务放入 rescue DSQ 以受限带宽运行,等待过久时升级为不可抢占的 protected execution。当救援队列持续过载时,逐出消耗救援资源最多的子调度器而非归咎于等待者。