fix(axvm): preserve PSCI in generated guest FDT - #1926
Conversation
There was a problem hiding this comment.
本 PR 试图为异步 DMA polling 提供按回调作用域限制的 guest-memory access:axdevice 增加 DMA poller 注册/授权,axvm 在 vCPU0 主循环及 notify 路径调用它;同时保留 PSCI FDT 节点并在写回前校验 FDT。它新增了共享虚拟化接口,feature-development.md 适用;从当前提交与 PR 描述未见独立设计材料,且实际消费方尚未接入。
影响范围是共享的 axdevice/axvm 设备运行时和 VM DMA 内存访问。除下列问题外,FDT/PSCI 修改与既有 VM 轮询模式未发现独立阻塞;但 DMA 路径并不隔离,因为它目前无法推进任何真实设备请求。
验证:cargo fmt --check、cargo test --manifest-path virtualization/axdevice/Cargo.toml --all-features(47 项通过)及对应 axdevice clippy 通过;cargo test --manifest-path virtualization/axvm/Cargo.toml --all-features(251 项通过)。axvm 全特性 clippy 被 base 中未改动的 os/arceos/modules/axtask/src/run_queue.rs:182 的 clippy::needless_return 阻塞。组织 CI 当前为 36 success、37 skipped、1 cancelled、1 failure;失败的 Test axvisor x86_64 ACPI direct and OVMF boot (vmx) / run_host 在 Run command 失败,但 API 未提供可判定根因的日志,且其覆盖 VM 运行面,不能据此排除关联性。
既有 review/讨论均为空。重复检索确认 dev 尚无同名能力;但开放 PR #1927 正在实现实际 VirtIO DMA poll 消费方,因此两者存在直接依赖/重叠,当前 PR 不能单独实现其“修复”目标。
Review todo 已审计:格式、axdevice 测试/clippy、axvm 测试、基础模式、FDT、CI、既有评论及重叠 PR 均已核查;唯一未解决的阻塞项如下。请先完成真实设备接入及可回归验证后再请求复审。
Powered by gpt-5.6-terra
c944253 to
f56b496
Compare
There was a problem hiding this comment.
本 PR 已将此前未接入生产消费者的 DMA polling 改动移出,当前只修复 AxVM 生成 guest FDT 时错误过滤 PSCI firmware 节点的问题,并在 runtime patch 序列化后重新解析输出以便在交给 guest 前返回 InvalidData。arm,psci、arm,psci-0.2 与 arm,psci-1.0 均被明确保留;新增单元测试通过真实 FDT API 验证 arm,psci-0.2 节点会留在输出中。变更只影响 axvm 的 FDT 生成/校验边界,未改变 PSCI hypercall、设备直通或其他 guest 配置契约。
feature-development.md 不适用:这是已有 FDT 过滤行为的 bug 修复,不新增公共接口或功能。已检查基线 PSCI/FDT 处理和相邻 FDT tree 实现,未发现重复实现或层次/错误传播问题;开放 PR #1927 是已拆分出去的 VirtIO DMA 功能消费者,与当前 FDT 修复不再重叠。既有 DMA review thread 的问题已由本 head 移除相关 API 并转入 #1927,当前变更已解决该意见。
验证:组织 CI 中格式检查通过;原 Test axvisor aarch64 qemu (smoke + axtest) / run_host 显示失败但只暴露 Run command 的 exit code 1,未提供可诊断日志。已在当前 head 按 CI 配置完整复现并通过:cargo xtask axvisor test qemu --arch aarch64 --test-case smoke(1/1 passed)以及 cargo xtask ktest qemu -p axvisor --test axtest --arch aarch64(AXTEST_SUITE_OK,36 passed/0 failed)。cargo fmt --check 通过;全特性 axvm clippy 被 base 中未修改的 os/arceos/modules/axtask/src/run_queue.rs:182 的 needless_return 阻塞;host cargo test 链接缺少 AxVM 运行环境的 STACK_SIZE、PAGE_SIZE 和 per-CPU linker symbols,故不将其归因为本 PR。
审核清单已完成:无需新增 app/Starry syscall/unsafe/文档或 reviewer 分派;没有遗留阻塞问题或测试缺口。
Powered by gpt-5.6-terra
问题
AxVM 根据宿主设备树动态生成 guest FDT 时,现有过滤规则会删除 PSCI 固件节点。依赖 PSCI 的 ArceOS guest 因而可能在平台初始化阶段无法取得 CPU 电源管理方法。
修改
arm,psci、arm,psci-0.2或arm,psci-1.0的节点。实现逻辑
PSCI 描述的是 guest 启动所必需的固件接口,不属于普通设备直通范围,因此应作为生成 FDT 的基础节点显式保留。序列化后的重新解析位于最终输出边界,可在加载到 guest 内存前发现结构错误。
Reviewer 指出的 DMA polling capability 没有生产消费者的问题已通过拆分处理:本 PR 已移除该 API;DMA polling capability 与真实的 AxVisor virtio-net consumer、设备注册及端到端测试一并放入 #1927。
验证
已通过:
尝试执行
cargo test -p axvm --lib boot::fdt,但 host 测试链接阶段缺少 AxVM 运行环境提供的STACK_SIZE、PAGE_SIZE和 per-CPU linker symbols,因此未将该命令列为通过项。