Eventfd、中断与 Virqfd 机制
1. 数据路径
1 | physical IRQ/MSI |
反向控制可通过 eventfd触发 mask/unmask或 resample。
2. Virqfd
virqfd.c把 eventfd waitqueue与 VFIO callback关联:
- enable;
- wakeup;
- thread callback;
- disable;
- flush。
关闭 eventfd或 device时必须安全摘除 waitqueue,避免 callback访问释放对象。
3. PCI INTx
Legacy level interrupt需要 mask、EOI/resample和 host共享处理。VFIO可自动 mask避免中断风暴,由用户/guest完成后 unmask。
4. MSI/MSI-X
每个 vector可关联 eventfd。vfio-pci配置 host MSI/MSI-X但向用户暴露受控 ABI,不能允许 guest任意编程 host message address。
5. Platform IRQ
VFIO platform为每个 IRQ resource提供 index,支持 maskable/automasked flags和 eventfd trigger。
6. IRQ bypass
支持时,KVM irq bypass可减少 userspace中转,使 host producer直接连接 guest irq consumer,降低延迟。
7. 禁用顺序
1 | mask hardware |
否则会发生 use-after-free或中断风暴。
8. 安全
-限制 vector count;
-验证 index/start/count;
-配置空间 MSI capability需虚拟化;
-设备 reset后重建 IRQ state;
-恶意设备仍可高频中断造成 DoS;
-中断隔离不替代 DMA IOMMU。
9. RK3588
PCIe root使用 GIC ITS msi-map,说明 MSI路由存在;这不等于 DMA有 IOMMU隔离。MSI可用和安全 passthrough是两个独立条件。
正在加载留言…