Skip to content

fix(someboot): clamp x86 LAPIC timer delta - #1794

Merged
ZR233 merged 1 commit into
devfrom
codex/fix-someboot-lapic-timer-min-delta
Jul 31, 2026
Merged

fix(someboot): clamp x86 LAPIC timer delta#1794
ZR233 merged 1 commit into
devfrom
codex/fix-someboot-lapic-timer-min-delta

Conversation

@ZR233

@ZR233 ZR233 commented Jul 31, 2026

Copy link
Copy Markdown
Member

问题

x86 someboot 在为已过期或被舍入为极小值的时钟事件编程时,会把 1 tick 直接传给 TSC-deadline 或 legacy LAPIC 计数器。LAPIC 时钟事件需要保留最小 delta;Linux x86 的对应配置使用 0xF

修改

  • 定义 LAPIC 定时器的最小 delta(0x0f)。
  • 在 TSC-deadline 和 legacy LAPIC 初始计数两条路径统一钳制请求值。
  • 在计数换算后再次钳制,避免校准比例把非零请求向下舍入到设备最小值以下。
  • 增加 host 单元回归:未修复时 ticks_to_apic_counts(1) 返回 1,修复后返回 15

提取范围

仅提取 #1775 中提交 6a138fb40beaa7883d6ff6cbcb3ee5624adc206a 的 someboot x86 LAPIC 最小间隔修复;不包含该提交其余的时钟事件框架改造。已检查当前开放 PR,没有发现同一 someboot LAPIC 修复的重复实现。

验证

  • cargo test -p someboot --lib legacy_lapic_clamps_overdue_events_to_the_device_minimum:先红(1 != 15),修复后绿。
  • cargo fmt --all -- --check
  • cargo xtask clippy --package someboot(8/8 checks passed)
  • cargo xtask arceos test qemu --test-group rust --target x86_64-unknown-none --test-case task-sleep(1/1 passed)

未运行物理板或自托管测试。

@ZR233
ZR233 marked this pull request as ready for review July 31, 2026 03:14

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 PR 仅修改 platforms/someboot/src/arch/x86_64/trap.rs:为 TSC-deadline 与 legacy LAPIC 初始计数两条路径统一施加 0x0f 的最小 delta,并在 tick→APIC count 换算后再次钳制,避免校准比例向下取整后重新落到设备下限以下。该修复局限于 x86 someboot 的本地 APIC 定时器编程,不改变公共接口、其他架构路径或用户态 ABI;feature-development.md 不适用(既有缺陷修复,而非新增能力)。

实现与 Linux x86 LAPIC 的最小事件间隔方向一致;新增的源码末尾单元测试直接覆盖 legacy 路径中 1 -> 0x0f 的回归场景,未修复实现会失败。未发现新的 unsafe、锁/原子同步、资源所有权或 ABI 风险。

验证:

  • cargo fmt --check:通过。
  • cargo clippy --manifest-path platforms/someboot/Cargo.toml --all-features -- -D warnings:通过。
  • cargo test --manifest-path platforms/someboot/Cargo.toml --all-features:通过(库测试 46 项及全部集成测试)。
  • 当前 head 4cbe6a52b7565bc4725d862a00bbb2d00ede5651 的组织 CI:Detect changed pathsRun sync-lint / run_containerCheck formatting / run_host 成功;其余跳过项符合矩阵/路径条件,未见 PR 相关失败。

已检查已有 review / issue 评论:均为空,无遗留讨论。已对 base 中既有 x86 定时器代码和开放 PR 的 LAPIC timersomeboot x86 关键词进行重复/重叠核对;未发现重复或依赖顺序冲突。没有新增或变更 app/QEMU 流程,故 app 运行准备不适用。最终 checklist 已逐项完成,无未解决风险、测试缺口或需要追加领域审阅者的事项。

Powered by gpt-5.6-terra

@ZR233
ZR233 merged commit bb56242 into dev Jul 31, 2026
78 of 81 checks passed
@ZR233
ZR233 deleted the codex/fix-someboot-lapic-timer-min-delta branch July 31, 2026 04:11
This was referenced Jul 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant