You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在5.14内核中禁用CONFIG_PREEMPT_RCU?解决RCU警告问题

解决5.14内核中RCU读临界区上下文切换警告及禁用CONFIG_PREEMPT_RCU的方法

问题现象

在5.14内核模块中调用rcu_read_lock()/rcu_read_unlock()时触发如下警告,但相同代码在3.14内核可正常运行:

[ +0.000004] Voluntary context switch within RCU read-side critical section!
[ +0.000005] WARNING: CPU: 3 PID: 93953 at kernel/rcu/tree_plugin.h:318 rcu_note_context_switch+0x24d/0x270

原因分析

5.14内核默认启用了CONFIG_PREEMPT_RCU=y,而3.14内核未开启该选项。当前模块适配的是经典RCU实现,读临界区不允许主动上下文切换,PREEMPT_RCU会对这类场景触发警告。

禁用CONFIG_PREEMPT_RCU的方法

CONFIG_PREEMPT_RCU在5.14内核中不是直接可见的menuconfig选项,它的启用状态依赖于内核抢占模型的配置,需通过调整前置选项来禁用:

  • 进入内核配置界面:make menuconfig
  • 导航到 Kernel Features -> Preemption Model
  • 选择以下任一抢占模型即可自动禁用CONFIG_PREEMPT_RCU:
    • No Forced Preemption (Server):对应CONFIG_PREEMPT_NONE=y,和3.14内核默认行为一致,是经典RCU对应的抢占模型
    • Voluntary Kernel Preemption (Desktop):对应CONFIG_PREEMPT_VOLUNTARY=y
  • 保存配置后重新编译内核

注意:如果当前选择的是 Preemptible Kernel (Low-Latency Desktop)(对应CONFIG_PREEMPT=y),则CONFIG_PREEMPT_RCU会被强制启用,无法单独关闭。

内容的提问来源于stack exchange,提问作者user1720713

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:04:58