该函数的作用很简单:调用arch_setup_msi_irqs方法,去设置msi,然后通过pci_msi_setup_check_result函数去校验设置的结果,看看是否成功,若失败则会到sysfs之中,清除之前设置的一些数据。 arch_setup_msi_irqs 该方法位于pci/msi/legacy.c中,它会去真正调用每个体系结构的处理器特有的arch_setup_msi_irq方法,真正的...
msi_set_enable(dev, pos,0);/*Disable MSI during set up*/ pci_read_config_word(dev, msi_control_reg(pos),&control); /*MSI Entry Initialization*/ entry=alloc_msi_entry(dev); if(!entry) return-ENOMEM; entry->msi_attrib.is_msix=0; entry->msi_attrib.is_64=is_64bit_address(control)...
MSI需要分配连续的向量块,而MSI-X可以分配多个单独的向量。 可以通过使用PCI_IRQ_MSI和/或PCI_IRQ_MSIX标志调用pci_alloc_irq_vectors()来启用MSI功能,然后再调用request_irq()。 这会导致PCI支持将CPU向量数据编程到PCI设备的功能寄存器中。许多架构、芯片组或BIOS不支持MSI或MSI-X,仅使用PCI_IRQ_MSI和PCI_IRQ...
389ret=arch_setup_msi_irqs(dev,1, PCI_CAP_ID_MSI); 390if(ret) { 391msi_free_irqs(dev); 392returnret; 393} 394 395/*Set MSI enabled bits*/ 396pci_intx_for_msi(dev,0);// 设置配置空间的command寄存器,使能MSI中断. 397msi_set_enable(dev,1);// 设置配置空间的MSI寄存器,使能MSI中断...
_msix_range static int __pci_enable_msix_range(struct pci_dev *dev,...该函数原型如下: int pci_msi_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) 该函数首先获取msi的domain,校验是否为继承的...(我还不明白这里是干啥意思的) 然后就会去调用pci_msi_legacy_setup_msi_irqs函数,去...
xilinx_pcie_msi_chip.dev = dev; bus->msi = &xilinx_pcie_msi_chip; #endif // 扫描下级总线,然后申请内核资源 pci_scan_child_bus(bus); pci_assign_unassigned_bus_resources(bus); #ifndef CONFIG_MICROBLAZE pci_fixup_irqs(pci_common_swizzle, of_irq_parse_and_map_pci); ...
PCI总线进一步提出了MSI(Message Signal Interrupt)机制,该机制使用存储器写总线事务传递中断请求,并可以使用x86处理器FSB(Front Side Bus)总线提供的Interrupt Message总线事务,从而提高了PCI设备的中断请求效率。 虽然从现代总线技术的角度上看,PCI总线仍有许多不足之处,但也不能否认PCI总线已经获得了巨大的成功,不仅x8...
优化portdrv IRQs,当有用户使用的时候才申请中断。 patch: PCI/portdrv: Do not setup up IRQs if there are no users - Rework and simplify _OSC negotiation for control of PCIe features (Joerg Roedel) _OSC协商控制代码做了重构。 patch: PCI/ACPI: Remove OSC_PCI_SUPPORT_MASKS and OSC_PCI_CONTRO...
In this setup, the pci_alloc_irq_vectors() call returns 1 single MSI vector allocated (nr_vectors = 1) when e.g. 4 are requested (mhi_cntrl->nr_irqs = 4) like this: Code: Select all nr_vectors = pci_alloc_irq_vectors(pdev, 1, mhi_cntrl->nr_irqs, PCI_IRQ_MSI); ...
if (!msi_is_enabled(msis->host_state)) return 0;ret = ioctl(vdev->fd, VFIO_DEVICE_SET_IRQS, &irq_set); @@ -171,8 +191,8 @@ static int vfio_pci_disable_msis(struct kvm *kvm, struct vfio_device *vdev, return ret;