Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux QEMU-msi仿真_Linux_Qemu_Pci_Pci E_Irq - Fatal编程技术网

Linux QEMU-msi仿真

Linux QEMU-msi仿真,linux,qemu,pci,pci-e,irq,Linux,Qemu,Pci,Pci E,Irq,我正在使用一个模拟QEMU设备来模拟FPGA PCIe接口。我使用lev pci设备作为基本模板: 我的设备使用MSI中断进行通信。内核驱动程序模块能够启用MSI中断并接收它们。我修改了lev pci.c以添加 msi_init(dev, 0x70, 1, false, false); 到初始化,然后 msi_notify(pci_dev,0); 以“pci_levdev_read”函数作为基本测试。我可以跟踪在调试器中生成的msi中断,但我没有在主机上接收到该中断。我是否错过了启用MSI

我正在使用一个模拟QEMU设备来模拟FPGA PCIe接口。我使用lev pci设备作为基本模板:

我的设备使用MSI中断进行通信。内核驱动程序模块能够启用MSI中断并接收它们。我修改了lev pci.c以添加

msi_init(dev, 0x70, 1, false, false);
到初始化,然后

msi_notify(pci_dev,0);

以“pci_levdev_read”函数作为基本测试。我可以跟踪在调试器中生成的msi中断,但我没有在主机上接收到该中断。我是否错过了启用MSI中断的步骤?

解决方案是在内核模块中启用DMA

pci_set_dma_mask(pdev, DMA_BIT_MASK(32))
pci_set_master(pdev)

如果问题解决了,请把你自己的问题标记为已回答。你的回答给了我很多帮助,这使我免于地狱。这个问题在上周持续了几天。我在QEMU-devel邮件列表上发布了一个关于这个问题的帖子,但没有回复。很高兴它很有用。我有这个问题,因为我的旧测试台没有IOMMU,所以它可以在硬件上工作,但不能在QEMU上工作。让我疯狂了大约一个星期。