Merge blocked
欢迎来到 openUBMC 社区
Hey @xiaoxinglxs , 感谢你对社区的贡献.
机器人使用手册
有关指令的使用,可以点击 说明文档 或 论坛 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。您可以自助配置此仓库的 PR 合并规则,更多详情,请参阅机器人自助配置使用手册。
联系指引
有疑问可以联系 SIG: sig-component-drivers ,
维护者是: @dongyushan, @net_swift_wangchen, @sam_h1973, @u012924942, @weixin_37569011, @xiaoxinglxs ,
优秀贡献者是: @hzy1010, @leessential .


人工检视报告
感谢 @xiaoxinglxs 的贡献!本轮围绕双向事务隔离、重组资源按来源/已登记响应分配、Tag 共享与异常/复位/peer 失效清理,配套单测充分(方向/介质/物理来源/乱序/长度/超时/可信响应配额/跨类型 Tag/复位与 peer 隔离),且文档与版本号同步更新,整体质量优秀。
📋 检视概览
| 项目 | 详情 |
|---|---|
| 评级 | 良好 |
| 严重问题 | 0 |
| 警告 | 0(本轮新增) |
| 建议 | 0(本轮新增) |
已确认修复的问题 ✅
对照既有 openubmc-ci-bot 检视意见与当前头版本 47083fd 逐条核对:
- 💡 SOM 被配额拒绝前清掉同键在途半包 →
mctp_protocol.cpp:355已将m_rx_ctx.erase(id)移到容量/配额/超长检查通过之后,被拒的 SOM 不再破坏仍有效的半包。✅ 已修复 - 💡 header-only MCTP 报文静默丢弃 →
mctp_protocol.cpp:275pop改data.size() <= mctp_hdr_len并补debug_log。✅ 已修复 - 🚨 PCIe 补齐尾后越界写入 →
pcie_vdm_protocol.cpp:160由resize(size()+pad)+std::fill_n(begin()+size(), ...)改为resize(size()+pad, 0),彻底消除越界写;新增test_tx_padding_at_capacity_boundary覆盖。✅ 已修复 - ⚠️ 重组池满/超长/单包静默丢弃 →
process_som、单包som&&eom分支均已补debug_log。✅ 已修复 - ⚠️ Tag 选择与
reserve_responseTOCTOU →ep_mctp.lua:158-168在挑选 Tag 时先查response_reserved,且「Tag 检查到 C++ 预约之间不 yield」。✅ 已处理
仍需关注/按设计保留的项
- 250ms 闲置巡检与 100ms 包间阈值(
mctp_engine.lua:242vsINTER_PACKET_TIMEOUT=100ms):文档已明确「250ms 空闲巡检只决定空闲回收粒度,不把包间窗口延长到 250ms 或 1s」,按设计保留。 - 通知发送路径(
send)8 个 Tag 占满时抛背压异常:作者已用test_send_reports_backpressure_without_reusing_active_tags固化「明确失败、不复用在途 Tag、不静默丢弃、释放后恢复」的契约,属有意的有界隔离,按设计保留。 - NC-SI 对
tag_owner主动报文静默丢弃(不补日志):已在 PR 描述与文档说明「NC-SI 无主动报文上报接口,不宣告 AEN」;与 general 端点新增 DEBUG 日志不对称,属可观测性取舍,不阻塞。
结论
核心算法(reserve_response/response_reserved/renew_response/release_response、invalidate_peer、expire_reassembly、重组准入与来源/响应配额)逻辑自洽,message_key(介质/双向物理地址/EID/Tag/TO)与响应对应关系正确,池上限(32 重组、64 预约)、1s 总期限、peer 隔离与旧 Tag 隔离均按设计生效。建议合入;invalidate_peer 的上层接线将由后续 PR 接入,属 PR 已声明的范围外。


| 任务名称 | 结果 |
|---|---|
| pre-commit检查 | ✅ SUCCESS |
| PR描述检查 | ✅ SUCCESS |
| 防投毒检查 | ✅ SUCCESS |
| 开源合规检查 | ✅ SUCCESS |
| 编译构建 | ✅ SUCCESS |
| UT测试 | ✅ SUCCESS |
| IT测试 | ✅ SUCCESS |
| 代码覆盖率 | ✅ SUCCESS |
| 修改行数检查 | ✅ SUCCESS |
| 头文件检查 | ✅ SUCCESS |
| AI Review | ✅ SUCCESS |


[P2] EID 更新只应清理对应介质的在途状态
PCIe 与 SMBus 共用同一个 mctp_protocol。若 SMBus 查询已收到首片,此时 PCIe 重新发现经 set_bmc_eid 更新本端 EID,这里的 reset_reassembly() 会把两种介质的 m_rx_ctx 和 m_responses 一并清空:随后合法的 SMBus 尾片查不到半包,NVMe More Processing 的预约续期也返回 false,造成无关 SMBus 查询失败;set_smbus_eid 中的同类调用对 PCIe 同样存在影响。本轮用当前 47083fdb 的原始 C++ 做了 ASan/UBSan 对照:SMBus 首片→PCIe EID 10→11→SMBus 尾片,当前提交交付数为 0、预约/续期均为 false;共同基线 0fe122aa 同样操作交付数为 1,当前提交不改 PCIe EID 也交付 1。请按被修改的介质筛选清理重组与预约,将全表清空留给整引擎复位,并补充双向跨介质回归。


当前PR是否有AI参与:
[ ] 否
[x] 是
__1. AI Agent 平台: OpenAI Codex
__2. AI 模型: gpt-6-astra(实现、测试与独立复核)
__3. Prompt上下文 : 用户授权接手 SP888-MCTP 联调所需的 BMC 实现,修复同 Tag 主动通知误完成查询,隔离重组并保护既有 requester 资源;按门禁拆分可独立验证的模块。
PR功能描述 / 为什么需要这个合入:
对端主动通知可能误完成本端同 Tag 查询,分片关联维度及资源保护不足。本 PR 隔离双向事务、重组来源并为已登记查询保留响应空间,保持 VDPCI 通知链路。
修改方案:
响应方向才可完成 VDPCI、NC-SI 和通用查询;通用 TO=1 过滤保留 DEBUG 诊断。重组键包含介质、双向物理地址/EID、Tag/TO,32 项分为普通与可信响应各16项,普通每来源4项;4096B、包间100ms和总1s上限。最多64项预期响应登记,匹配完整传输键和消息类型;同路由跨上层协议共享8个Tag。查询完成/失败/消费异常/复位释放,NVMe More Processing续期,旧协程不得删除新等待项;PCIe补齐改为resize。增加按介质、物理地址和EID定向撤销重组/响应预约并隔离旧Tag的接口,保留无关对端;上层路由接线另行提交。修正两处旧discovery测试漏传ep_name。版本1.130.16,一个提交。
验证方案:
重新构建本拆分分支 native/ARM 协议核心及绑定;验证方向、介质、物理地址、乱序、长度、超时、可信响应配额、跨类型Tag、异常及复位释放。
测试建议:
继续实际跨接口/地址代次、Control专用资源、异步硬件TX完成和NVMe More Processing最终应答。PLDM协议及Base由PR !13承载,取时业务模块由PR !12承载,本PR不含这些模块。
自验证报告:
最新 47083fdb94fde59702baa33959a734b7eb932809:139/139、native/ARM协议核心和Lua绑定构建、pre-commit、生产核心ASan/UBSan均通过。拒绝超长或降为普通配额的同键SOM不删除旧合法半包;满32项时普通/保留消息的合法重启均通过。包间99.999/100ms和总期999.999/1000ms边界确定性通过;文档明确接收新片也执行100ms检查,250ms仅为空闲回收粒度。共994新增行,一个提交,版本仍1.130.16。以下历史实测保持原SHA归属,本增量尚未安装43000。
当前修订7e4d6e32364f完整139/139通过、pre-commit全部通过,995新增行;本轮仅Lua发送背压计数与用例,C++源码与62f103550d0d已验证的native/ARM库一致。
按介质/物理地址/EID清理重组、撤销查询预约;旧Tag隔离至原查询截止后再加1秒,拒绝迟到帧,旧release和重复invalidate不会提前解除或延长隔离,仍占64项总预算。
ASan/UBSan通过;确定性时钟验证1019.999/1020ms隔离边界、到期恢复及64项耗尽背压。原重组和查询续期时钟边界继续通过。
四PR集成43f21765fb4e(含本PR之前修订)在43000通过正常/时间服务退出/恢复各44请求、28条通知和5次约3秒合法未应答查询。新定向接口和Tag隔离尚未安装43000,不引用旧实机结果宣称本次已验收。
Send在8个Tag均忙时明确失败并计数,不复用在途Tag或静默丢弃;释放后恢复。该新用例先验证计数缺失,再修复通过。调用者需处理失败并按业务策略重试。
该PR关联的issue
fixes #11
希望检视人员了解:
当前PR替换早期基础范围中的PLDM重叠代码,PLDM必要实现和测试完整保留在PR !13。!14提供PCIe有界发送,!15提供路由变化与MDB重绑;完整跨接口身份、旧事务按peer接线、Control专用配额、单包限流和阶段2仍待实现验收,不将局部通过标为整阶段完成。没有自动合入或修改无关在线服务。