Merged
fix(nvidia): 修正 RTX 6000 Ada 身份并试点独立变更片段 #1441
fix(nvidia): 修正 RTX 6000 Ada 身份并试点独立变更片段 #1441
Merged
liuxingsenAdd on 6 days ago
liuxingsenCollaborators
6 days ago

当前PR是否有AI参与:

[ ] 否

[x] 是
__1. AI Agent 平台: OpenAI Codex。
__2. AI 模型: gpt-6-astra(沿用原 PR 已核实的代码、测试、文档和只读复核模型)。本次仅重建源分支及 PR 元数据,当前会话未提供可独立核实的精确模型标识,未新增或改写代码提交。
__3. Prompt上下文 : 保留 RTX 6000 Ada 身份修复及独立变更片段试点。根据用户要求,以 #1373 当前内容重新创建一个 PR,复用 Issue #834,保持全部修改和两个 commit 完全一致;不合入、不关闭原 PR。

PR功能描述 / 为什么需要这个合入:

RTX 6000 Ada 的 SR 误用了 RTX A6000 的 DeviceId 0x2230、SubSystemDeviceId 0x1459。修正为 0x26b1、0x16a1,使公开身份与文件名、DDS、VPD 兼容性表一致。update_vid_did() 只刷新前两项 ID,错误子系统 ID 会残留,因此两项均需修正。

同时试点版本冲突处理:开发期间使用独立 UUID 变更片段,正式版本号和根 CHANGELOG 在受控合入队首统一生成。mds/service.json.version 直接参与 Conan 发布,不能先合入未定版源码,再异步补版本。

本 PR 按用户要求从 #1373 原样重建,保留同一提交链、代码树及关联任务,供重新评审。

修改方案:

  • SR 只修正两个 ID;回归覆盖 11 对 NVIDIA DDS/SR,保留 V100 精确例外及 pcie_gpu_card 套件入口。
  • 增加独立 UUID 片段;开发态 mds/service.json、CHANGELOG 与原基线 00cdef7544b87e99a27b6e6c862c7ce79827e014 一致。
  • 增加标准库与 Git 实现的 scripts/release_metadata.py:validate 校验片段,prepare 默认预览、显式 --write 才落盘,check 核对结果。定版按基线版本第三段加一,保留非版本字段及历史日志,并归档原始片段、基线 SHA、版本、日期与内容摘要。
  • 拒绝过期基线、源码变化、同名本地标签、重复消费 UUID、组件名不符及异常路径;增加本地片段格式钩子、release_metadata Meson 套件及中文文档。
  • 两个原提交及其作者、时间、版权、许可证、Signed-off-by、Co-Authored-By、Change-Id 均保持原样;不 rebase、amend、squash 或重新升版。

验证方案:

核对新旧 PR 的完整提交列表、代码树和所有变更文件,重新运行脚本单元测试、NVIDIA 身份回归、片段校验及差异检查。创建后从平台读回 Issue 双向关联、合并后关闭选项、AI 声明、评审及新 PR 的流水线状态。

测试建议:

真实 RTX 6000 Ada 重新发现后,核对连接器、设备树、资源树四元组为 10de26b1_10de16a1;GPU 管理响应和计算能力另行验证。

社区接入版本工具时,验证检查后源/目标分支变化、两个队首任务竞争、超时重试,以及固定合入 SHA 到 tag、Conan recipe/package revision 的对应关系;发布端另查同版本占用和制品可见性。

自验证报告:

2026-11-01,本次重建保持 HEAD b814a23f444ced621de84ea318964465cce553df、完整代码树 8782051892809e5a03e8e14ee064e97e2bfff121。核查时目标 main 为 3d3deecc0d9b48c8ae061df34437f322a3c2305a,共同祖先为 00cdef7544b87e99a27b6e6c862c7ce79827e014;本次未重放或改写提交。

原提交(完整保留) 内容 新增 删除 合计
ec14d78998cc64fa1ae17ebd9c81ea56dacd73e0 GPU 身份修复及回归 117 2 119
b814a23f444ced621de84ea318964465cce553df 版本工具、片段、文档及回归 904 1 905

共 10 个变更文件,新增 1021 行、删除 3 行;每个原提交新增与删除之和均小于 999。

本次实际重新执行:

  • python3 -B -m unittest discover -s scripts/tests -v:41/41 通过。
  • NVIDIA CSR 身份回归:3/3 通过,覆盖 11 对 DDS/SR。
  • release_metadata.py validate:1 个待定版片段校验通过。
  • 按 SR 原有 CRLF 换行格式执行差异检查通过。默认检查会将两处修改行的 CR 识别为尾空白;已核对基线与当前文件换行统计一致且无行末空格,保持原文件格式。
  • 测试后源工作树保持干净,未新增代码提交。

原 #1373 对同一 HEAD 的历史验证包括官方文件头检查、完整变更文件 pre-commit、提交规范检查;更早的负向对照、最小 Meson、Conan 引用和定版演练详见原 PR,均不冒充本次重新执行结果。本次未执行 C++ 全量构建、ASan、QEMU、真实板卡或正式 Conan 上传。新 PR 的远端门禁独立检查,不继承原 PR 的批准或 CI 标签。

该PR关联的issue

fixes #834

希望检视人员了解:

按本次用户要求“修改和 commit 保持一致”,原样保留两个提交,并保持非草稿、不启用 Squash;这是对通用单提交约定的明确例外。原 PR 保持现状,复用现有任务 #834,启用合并后关闭关联 Issue。

版本工具仍是仓库侧阶段一试点。社区强制门禁、串行合入控制器、源/目标 SHA 原子约束及固定 SHA 发布链路尚未接入。正式合入前仍须在受控队首完成 prepare/check,整理生成元数据并重新验证相应新 SHA;此次原样重建没有执行这些后续发布动作。

脚本不联网、不提交、不合入、不创建 tag、不上传制品;本地 check 不替代发布端 Conan 占用检查。已有文件版权及许可证完整保留,两个新增 Python 文件沿用原 PR 中经用户指定的 Huawei 模板。

likedislike
Pull Request has been successfully merged by openUBMC-robot.
(Thank you for liuxingsen's contribution.)
LliuxingsenCollaborators
6 days ago Created pull request, commit d2df3e9f
LliuxingsenCollaborators
6 days ago Associated issue: 修正 RTX 6000 Ada SR 的 PCIe 身份四元组
openUBMC-robotopenUBMC-robotCollaborators
6 days ago Added label: sig/sig-component-drivers
openUBMC-robot
openUBMC-robotCollaborators
6 days ago Comments:

欢迎来到 openUBMC 社区

Hey @xiaoxinglxs , 感谢你对社区的贡献.

机器人使用手册

有关指令的使用,可以点击 说明文档 或 论坛 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。您可以自助配置此仓库的 PR 合并规则,更多详情,请参阅机器人自助配置使用手册。

联系指引

有疑问可以联系 SIG: sig-component-drivers ,
维护者是: @dongyushan, @net_swift_wangchen, @sam_h1973, @u012924942, @weixin_37569011, @xiaoxinglxs ,
优秀贡献者是: @adellonzzy, @avery-j, @changxingOpenUBMC, @chenshengfan, @dli_bmc, @huangjiapei, @leessential, @net_swift_tianwen, @xiapengc1, @yelvsub .

likedislike
openUBMC-robotopenUBMC-robotCollaborators
6 days ago Added label: ai-co-authoredstat/needs-squash
openUBMC-robotopenUBMC-robotCollaborators
6 days ago Added label: openUBMC-cla/yes
openUBMC-robotopenUBMC-robotCollaborators
6 days ago Added label: ai-includes-code
openUBMC-robot
openUBMC-robotCollaborators
6 days ago Comments:

CLA 签署成功

xiaoxinglxs, 感谢您的代码贡献。 所有的代码贡献者都已完成了 CLA 签署。 👍

likedislike
openUBMC-robotopenUBMC-robotCollaborators
6 days ago Added label: ai-compliance-successful
Oopenubmc-ci-botCollaborators
6 days ago Added label: ci-running
openubmc-ci-botCollaborators
6 days ago Comments:

CI已开始运行,查看流水线详情:流水线链接

likedislike
openUBMC-robot
openUBMC-robotCollaborators
6 days ago Comments:

/ai review

likedislike
atomgit-bot
atomgit-botCollaborators
6 days ago Comments:

代码审查

审查结论

逐文件核查结果(8/8 已审查)

文件 结论
.pre-commit-config.yaml no issues(repo/hooks/id/name/entry/language/pass_filenames/always_run 键名均正确;local repo 不需要 rev;validate 子命令在无 --base 时按设计只校验片段,hook 可从仓库根正常执行)
changes/pending/9ba9fc8b-…json no issues(6 个键 schema/component/category/version_action/summary/compatibility 与 fragment_value() 的字段集合完全一致,uuid.UUID(str).__str__ 校验通过,category=fix 在 CATEGORIES 内,summary/compatibility 无控制字符与首尾空白)
drivers/pcie_gpu_card/nvidia/csr/14140130_10de26b1_10de16a1.sr no issues(改后 VendorId/DeviceId/SubSystemVendorId/SubSystemDeviceId = 10de/26b1/10de/16a1 与 DDS "ID": "10de26b1_10de16a1"、文件名一致;A6000 的 10de2230_10de1459 仍是独立文件未受影响;全文件 1–313 行为 CRLF、末行为既有格式,未引入换行混用)
scripts/release_metadata.py 1 个 P3(锁文件残留)
scripts/tests/test_release_metadata.py 1 个 P3(测试内手动调用 setUp())
tests/drivers/pcie_gpu_card/nvidia/meson.build 与 tests/meson.build 同一问题,已在 tests/meson.build 的条目中合并说明(find_program('python3') 未设 required: false)
tests/drivers/pcie_gpu_card/nvidia/test_csr_identity.py no issues(四元组解析 (dev>>16, dev&0xFFFF, sub>>16, sub&0xFFFF) 与字段顺序正确;11 组 SR/DDS 一一配对且 DDS ID 均等于文件名;KNOWN_DEVIATIONS 精确登记 V100 1db4/1214 实测 1db6/124a,与该文件实际内容吻合,未掩盖新回归)
tests/meson.build 1 个 P3(find_program('python3') 硬依赖)

补充说明:release_metadata.py 中 replace_version(仅替换顶层 version)、strict_json(重复键/NaN 拒绝)、source_digest(路径+模式+内容,service.json 版本归一化,排除 CHANGELOG/pending/releases)、check_staged_content、check_committed_source、check() 的 receipt 重算比对均自洽;patch_bytes 对无尾换行文件追加 \ No newline at end of file 并对 CRLF 使用 --whitespace=nowarn,git apply 失败不会部分应用;subprocess 全程列表传参不经过 shell,路径经 path() 做绝对路径、..、逐级符号链接校验,未见注入/越界风险。

计数与总体风险

  • P0:0,P1:0,P2:0,P3:3(均为可选改进,非必须修复)
  • 总体判断:风险低。核心修复(SR 双 ID 修正为 0x26b1/0x16a1)与 DDS/文件名/回归用例三处一致,未发现新的可触发缺陷;新增的版本工具在既有单元测试覆盖下逻辑闭合。唯一需要发布侧注意的是:本 PR 未改动 mds/service.json 与根 CHANGELOG,正式发布前必须在受控队首执行 prepare --write 与 check(这是 PR 明示的流程约定,非代码缺陷)。
类型 数量
🔴 阻塞 0
🟡 建议 4

💬 仅评论

likedislike
Incorrect?
atomgit-bot
atomgit-botCollaborators6 days agoStart code review1
scripts/tests/test_release_metadata.py
@@ -0,0 +106,4 @@
106+ def test_prepare_lifecycle_preserves_bytes_and_is_idempotent(self):
107+ for final_newline in (True, False):
108+ with self.subTest(final_newline=final_newline):
109+ self.setUp() # 每个子用例使用独立仓库,避免前一次定版污染输入。
atomgit-bot
atomgit-bot6 days agoComments:

🔵 Low Priority

改动行(scripts/tests/test_release_metadata.py:109)在测试方法内直接调用 self.setUp() 以获得一个干净的临时仓库:

for final_newline in (True, False):
with self.subTest(final_newline=final_newline):
self.setUp() # 每个子用例使用独立仓库

问题:setUp() 不是可重入的初始化函数,每次调用都会 self.addCleanup(self.temp.cleanup)、重新 os.environ.copy() 并重建 self.repo/self.env。症状是:一次测试内注册 2-3 份 cleanup、残留多个临时目录直到 teardown;后续若在 setUp 中增加断言、类级状态或不可重入资源(共享 fixture、端口、全局缓存),本用例会以难以定位的方式失败而其它用例正常。

建议:将 setUp 中的仓库初始化抽成可重复调用的 _init_repository() 辅助方法,测试内调用它而不是 self.setUp(),避免重复注册 addCleanup 与重复复制环境变量;如需立即清理旧临时目录,可在重置前调用 self.doCleanups()。

likedislike
Incorrect?
atomgit-bot
atomgit-botCollaborators6 days agoStart code review1
scripts/release_metadata.py
@@ -0,0 +272,4 @@
272+ try:
273+ descriptor = os.open(lock_path, os.O_CREAT | os.O_EXCL | os.O_WRONLY, 0o600)
274+ except FileExistsError as exc:
275+ raise ReleaseError("已有本地定版进程或遗留锁;先核实其状态") from exc
atomgit-bot
atomgit-bot6 days agoComments:

🔵 Low Priority

改动行(scripts/release_metadata.py:273-275)用 os.O_CREAT | os.O_EXCL 在 .git/release-metadata.lock 建锁,异常路径下才由 finally: lock_path.unlink() 释放。

触发条件:prepare --write 在持锁期间被 SIGKILL、断电、或容器被强制回收(finally 不执行),锁文件残留。

失败模式:此后每次 prepare --write 都在 except FileExistsError 处直接报“已有本地定版进程或遗留锁;先核实其状态”并 exit 1,即定版/发布流程被永久阻塞,直到有人手工删除 .git/release-metadata.lock。错误信息只提示“核实状态”,工具本身没有任何手段区分“另一个进程正在运行”与“僵尸锁”,也没有 PID/时间戳可判断,运维人员可能误删正在运行进程的锁。

建议:建议在锁文件内写入 PID 与创建时间;捕获 FileExistsError 时读取并校验 PID 是否存活,对僵尸锁允许接管(或提供显式 --force-unlock 参数),避免异常退出后发布流程被永久阻塞。

likedislike
Incorrect?
atomgit-bot
atomgit-botCollaborators6 days agoStart code review1
tests/drivers/pcie_gpu_card/nvidia/test_csr_identity.py
@@ -0,0 +54,4 @@
54+ self.assertRegex(identity, r"\A[0-9a-fA-F]{8}_[0-9a-fA-F]{8}\Z",
55+ "DDS ID 必须为两组8位十六进制,以一个下划线分隔")
56+ self.assertEqual(identity, path.stem.split("_", 1)[1],
57+ "DDS ID 必须与文件名一致")
atomgit-bot
atomgit-bot6 days agoComments:

🔵 Low Priority

变更行(test_csr_identity.py:54-57):先用正则 \A[0-9a-fA-F]{8}_[0-9a-fA-F]{8}\Z 校验 DDS 的 ID,该正则显式允许大写十六进制;紧接着 assertEqual(identity, path.stem.split("_", 1)[1], "DDS ID 必须与文件名一致") 做的是大小写敏感的字符串相等比较。

问题链路:同一函数内两处校验对"同一字段的合法形态"给出了互相矛盾的口径。SR/DDS 文件名按现有约定为小写(如 14140130_10de26b1_10de16a1),一旦新增/修改的配对被写成大写(如 DDS 内 "ID": "10DE26B1_10DE16A1"),第一处正则通过(身份四元组完全正确),第二处却直接失败。

失败模式:语义完全等价、身份正确的配置被判为不合格,测试报错信息为"DDS ID 必须与文件名一致",指向的是大小写差异而非真实的身份错误,误导排查方向;同时该测试是本次修复的核心回归,误报会削弱其作为门禁的可信度。属于测试契约内部不一致,不是既有代码问题(本文件为新增文件)。

建议:统一 DDS ID 的合法形态口径:将比较改为大小写不敏感,或把正则收紧为只接受小写十六进制,避免"格式校验通过但一致性校验失败"的自相矛盾。

Suggestions
57
+ self.assertRegex(identity, r"\A[0-9a-fA-F]{8}_[0-9a-fA-F]{8}\Z",
58
+ "DDS ID 必须为两组8位十六进制,以一个下划线分隔")
59
+ self.assertEqual(identity.lower(), path.stem.split("_", 1)[1].lower(),
57
60
  "DDS ID 必须与文件名一致")
Apply suggestion
likedislike
Incorrect?
atomgit-bot
atomgit-botCollaborators6 days agoStart code review1
tests/meson.build
@@ -2,0 +6,4 @@
6+ args: files('../scripts/tests/test_release_metadata.py'),
7+ timeout: 120,
8+ suite: 'release_metadata',
9+)
atomgit-bot
atomgit-bot6 days agoComments:

🔵 Low Priority

改动行(tests/meson.build:3-9,以及 tests/drivers/pcie_gpu_card/nvidia/meson.build:4-10)把两个 Python 单测以 find_program('python3') 作为可执行程序注册进 Meson 套件:

test(
'test_release_metadata',
find_program('python3'),
args: files('../scripts/tests/test_release_metadata.py'),
...
)

问题:find_program 默认 required: true,找不到名为 python3 的可执行文件时是配置期硬错误,会使 meson setup 整体失败,而不仅仅是跳过该测试。此前该测试目录只有 C++ 测试入口,不依赖 python 可执行名。

触发条件/失败模式:在只有 python(无 python3 软链)或仅通过虚拟环境/pipx 提供 meson、PATH 中没有 python3 的环境里,meson setup 直接以 “Program 'python3' not found or not executable” 中断,整个构建无法配置——即使使用者并不打算跑这两个脚本测试。

这是可选的健壮性改进:改为 python3 = find_program('python3', required: false) 并在 python3.found() 时才注册 test(),与仓库其它可选依赖(如 dependency('gtest', required: false))的既有风格保持一致。

建议:把 find_program('python3') 改为 required: false 并保存到变量,仅在 found() 为真时注册 test()(两份 meson.build 同步处理),避免缺少 python3 时 meson setup 直接失败。

likedislike
Incorrect?
LliuxingsenCollaborators
6 days ago Resolved final issue
Oopenubmc-ci-botCollaborators
6 days ago Removed label: ci-running
openubmc-ci-botCollaborators
6 days ago Comments:
任务名称结果
pre-commit检查✅ SUCCESS
PR描述检查✅ SUCCESS
防投毒检查✅ SUCCESS
开源合规检查✅ SUCCESS
编译构建✅ SUCCESS
UT测试✅ SUCCESS
头文件检查✅ SUCCESS
AI Review✅ SUCCESS
ASAN检测✅ SUCCESS
likedislike
Oopenubmc-ci-botCollaborators
6 days ago Added label: ci-successful
huangleishengCollaborators
6 days ago Comments:

/lgtm
/approve

likedislike
openUBMC-robotopenUBMC-robotCollaborators
6 days ago Added label: approvedlgtm
openUBMC-robot
openUBMC-robotCollaborators
6 days ago Comments:

  • 标签 lgtm, approved 已被添加. 这意味着 yelvsub 已经检查过代码了. 👋
Tips
  • 如果PR还没有被合入, 请评论 /check-pr 进行检查. 😄
likedislike
openUBMC-robotopenUBMC-robotCollaborators
6 days ago Merged pull request, merge node SHA: 41a40d1c6d253684dd10d276c39270a53b7cab72