MSI-X (一)
- MSI中断
MSI中断本质上是一个memory write,memory write的地址就是设备配置空间的MSI address寄存器的值,memory write的数据就是设备配置空间的MSI data寄存器的值。Message address寄存器和message data寄存器是调用pci_enable_msi时,系统软件填入的。
也就是说,一个设备想产生一个MSI中断话,只需要使用配置空间的message address寄存器和message data寄存器发起一个memory write的请求,即往message address寄存器写入memory data。在X86系统下,message address对应的LAPIC的地址。
- 为何要引入MSI-X
前面讲了MSI中断的机制,其实MSI-X Capability中断机制与MSI Capability的中断机制类似。既然机制类似,为啥还要需要引入MSI-X呢?
回答这个问题前,我们先看看MSI有哪些限制?
- MSI相关的寄存器都是在配置空间中,从Message Control寄存器multiple message Capble字段可以看出MSI最多支持32个中断向量,且必须是2n,也就是说如果一个function需要3个中断向量,必须申请4个才可以满足。
- MSI要求中断控制器分配给该function的中断向量号必须连续。
MSI-X的出现就是为了解决上面两个问题,主要是第二个问题。