Eventfd、中断与 Virqfd 机制

Eventfd、中断与 Virqfd 机制

1. 数据路径

1
2
3
4
5
physical IRQ/MSI
-> VFIO handler
-> eventfd_signal()
-> QEMU
-> KVM irqfd/guest interrupt

反向控制可通过 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
2
3
4
mask hardware
-> detach eventfd/irq bypass
-> synchronize_irq/work
-> free IRQ

否则会发生 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是两个独立条件。

文章互动

阅读 --

留言

0 条留言

正在加载留言…