MSI-X和MSI最大的不同是message data、message address字段和status字段没有存放在设备的配置空间中,而是使用MSI-X Table structure和MSI-X PBA structure来存放这些字段。
msi的中断分配应该是先在linux内核里面分配了irq hwirq, 根据irq assign vector等,然后把vector写入到msix talbe的msg data字段,然后消息就和irq号关联起来了
1、 msi就是通过往中断控制器可以写内存产生中断的地方(中断控制器触发寄存器)写入了一条消息,就产生了中断
(中断控制器触发寄存器)的地址会写在msix Table的entry的Msg Upper Addr+Msg Addr里面(32位就不用用Upper Addr)
特定架构格式的data就写入到msix Table的entry的Msg data里面,例如x86写入的verctor arm64写的devid
irq_msi_compose_msg
2、msi中断的硬件中断号是构造出来的,使用index,pci总线号,fuction号等相或构造出来。所以一般看起来很大
3、msix Table的entry的Vector Control字段存放的是控制字段,当Mask Bit为1时,PCIe设备不能使用该MSI-X table entry来发送中断消息
4、存放在BAR空间PBA structure 跟msix table类似,这个存放的是中断状态
阅读(1617) | 评论(0) | 转发(0) |