已关闭
[缺陷] 双SP686C RAID卡MCTP通信失败:worker线程与smld线程跨lua_State竞态 #457
guanmaoning创建于 26 天前关闭于 9 天前
openUBMC-robot
26 天前 评论:
26 天前 评论:
26 天前 将 WeberChen 设为负责人
26 天前 添加了label:sig/sig-hardware
openUBMC-robot
26 天前 评论:
26 天前 评论:
欢迎来到 openUBMC 社区
Hey @guanmaoning , 感谢你对社区的贡献.
机器人使用手册
有关指令的使用,可以点击 说明文档 或 论坛 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。
联系指引
有疑问可以联系 SIG: sig-hardware ,
维护者是: @changxingOpenUBMC, @nathanael, @xiaoxinglxs, @yelvsub ,
优秀贡献者是: @dli_bmc, @weiziang, @yelmh .


openUBMC-robot
26 天前 评论:
26 天前 评论:
Issue 工作流介绍
社区的需求和缺陷的工作流状态处于纳管中。
| 类型 | 上个状态 | 下个状态 | 评论命令 | 谁可以操作 |
|---|---|---|---|---|
| 需求 | 待办的 | 已接纳 | /todo2accepted | SIG组: sig-release-management (maintainer) |
| 需求 | 已接纳 | 开发中 | /accepted2developing | 仓库成员角色: Maintainer, Committer, Contributor, Owner |
| 需求 | 开发中 | 转测中 | /developing2testing | 仓库成员角色: Maintainer, Committer, Contributor, Owner |
| 需求 | 转测中 | 待验收 | /testing2UAT | 仓库成员角色: Maintainer, Committer, Contributor, Owner |
| 需求 | 待验收 | 已完成 | /UAT2done | SIG组: sig-QA (maintainer,committer) |
| 需求 | 待办的 | 已挂起 | /todo2suspended | SIG组: sig-release-management (maintainer) |
| 需求 | 已挂起 | 已接纳 | /suspended2accepted | SIG组: sig-release-management (maintainer) |
| 需求 | 待办的 | 已拒绝 | /todo2rejected | SIG组: sig-release-management (maintainer) |
| 需求 | 已拒绝 | 已接纳 | /rejected2accepted | SIG组: sig-release-management (maintainer) |


26 天前 将 guanmaoning 设为负责人
此处折叠了6条事件消息 查看更多
18 天前 issue类型由 需求 改变为 缺陷
guanmaoning
18 天前 评论:
18 天前 评论:
/todo2fixing


18 天前 issue状态由 待修复 改变为 修复中
14 天前 关闭了 issue
14 天前 重新打开了 issue
guanmaoning
14 天前 评论:
14 天前 评论:
/fixing2UAT


14 天前 issue状态由 修复中 改变为 待验收
9 天前 issue状态由 待验收 改变为 已修复
9 天前 关闭了 issue
标题格式
[缺陷] 双SP686C RAID卡MCTP通信失败:worker线程与smld线程跨lua_State竞态
版本分支
问题发现版本
openUBMC 25.12 LTS
严重程度
复现类型
环境信息
预置条件
双 SP686C RAID 卡硬件环境,BMC 运行正常
复现步骤
实际结果及影响
双 SP686C RAID 卡场景下,MCTP 通信间歇性失败,200 次 AC 上下电必现。worker 线程与 smld 线程同时操作同一个 lua_State(L_worker),导致 Lua 栈/registry 损坏,MCTP 读写回调执行异常。
预期结果
MCTP 通信稳定可靠,多 RAID 卡场景下无间歇性失败。
问题定位情况
根因分析
问题根因是 worker 线程与 smld 线程跨 lua_State 竞态:
关键代码路径:
src/lualib/sml/init.lua line 37:local sml = setmetatable({ callback = worker.new(1) }, sml_mt)— 创建 worker 线程src/lualib/sml/init.lua line 53-55:sml.callback:send(mctp_ctrl_map[ctrl_idx], true)— 发送注册消息到 worker 线程src/lualib/sml/sml_callbacks.lua line 67-68:cbs:set_mctp_writeread_cb(tonumber(...), mctp_writeread)— 在 L_worker 上执行 luaL_ref