割り込み調査 - virtio

割り込みが来るタイミングを調べた。

  • reset
    • PCI_QUEUE_PFN に 0 を渡してデバイスリセットしたとき
    • PCI_STATUS に 0 を渡してデバイスリセットしたとき
    • バイスロード時のリセット
  • notify (isr=1)
    • 以下のいずれかの場合に割り込みが通知される
    • avail->flags で VRING_AVAIL_F_NO_INTERRUPT が設定されていない(割り込みを ON にしている)
    • avail->flags で VRING_AVAIL_F_NO_INTERRUPT が設定されていて以下の両方を満たすとき(割り込み OFF でも通知される場合)
      • device features で VIRTIO_F_NOTIFY_ON_EMPTY が設定されている
      • vq が使用中ではない
      • avail->idx == vq->last_avail_idx である
  • notify_config (isr=3)
    • link_status_changed イベントが起きたとき