| RFC-0185:移除 `zx_interrupt_bind_vcpu` | |
|---|---|
| 状态 | 已接受 |
| 区域 |
|
| 说明 | 移除了不再需要的 `zx_interrupt_bind_vcpu` 系统调用。 |
| 问题 | |
| Gerrit 更改 | |
| 作者 | |
| 审核人 | |
| 提交日期(年-月-日) | 2022-08-19 |
| 审核日期(年-月-日) | 2022-08-19 |
摘要
移除了不再需要的 zx_interrupt_bind_vcpu 系统调用。该功能所适用的使用情形已不再是我们想要支持的。移除此系统调用后,我们便可简化内核中的逻辑,并移除对 Hypervisor 中中断的客户机控制支持。
设计初衷
我们最初引入 zx_interrupt_bind_vcpu 是为了将物理中断绑定到 VCPU,这样主机就可以将中断拆分为两部分:优先级下降和停用。主机将继续发出优先级下降信号,但嘉宾随后可以发出中断停用信号。
目标是允许客户机控制物理设备的物理中断,以及虚拟设备。不过,我们不再需要此功能,移除该系统调用和支持基础设施将有助于我们简化代码并减少持续维护工作。
我们已从用户空间代码中移除此系统调用的所有使用,剩余的唯一使用是在内核单元测试中。
利益相关方
辅导员:
- leannogasawara@google.com
审核者:
- maniscalco@google.com
- tjdetwiler@google.com
- travisg@google.com
- zarvox@google.com
实现
为实现此目标,我们将进行以下更改:
- 从
lib/zx/interrupt.h中移除了 C++ 绑定。 - 从
core/interrupt/interrupt-test.cc中移除了单元测试。 - 从
vdso/interrupt.fidl中移除了系统调用。 - 移除了
InterruptDispatcher和InterruptEventDispatcher中的逻辑。 - 重新配置 GICv2 和 GICv3 以停用 EOI 模式,并启用一次性中断结束。
- 从 ARM64 Hypervisor 中移除了对物理中断的所有支持。
这些更改可以在少数几个 CL 中完成。
性能
此提案可能会对中断处理产生非常小的影响,我们可以在单次操作中发出中断结束信号。这意味着,我们不必单独停用中断,只需降低优先级即可。
安全注意事项
此提案对安全性没有影响。可以说,移除此系统调用可能会提高安全性,因为这样可以移除一个未受到仔细检查的系统调用,从而减少内核的攻击面。
隐私注意事项
此提案不会影响隐私权。
测试
此提案要求我们从树中移除所有与 zx_interrupt_bind_vcpu 相关的测试,目前这些测试完全包含在内核单元测试中。
此外,我们应该在单独的 CL 中更改为 EOI 模式,这样,万一出现中断,我们就可以快速回滚该 CL。
文档
我们需要移除与 zx_interrupt_bind_vcpu 相关的文档。目前,这完全包含在系统调用定义中。
缺点、替代方案和未知因素
一个缺点是,如果我们将来需要设备直通,可能必须实现此功能或类似功能。不过,最好优先选择半虚拟化设备,避免与设备直通相关的复杂性和维护成本。
在先技术和参考资料
不适用